Day15 NodeJS-NPM II

经过昨天的简介,今天要来讲NPM相对重要的部份:安装套件与管理,分成一般相依性安装、开发相依性安装、全域安装三个部份。

在提相依性安装之前,先说明一下其实NPM套件的安装也可以是不纪录相依性的安装,只要在专案资料夹路径透过终端机指令npm install <package name>就可以完成最基本的安装,但透过相依性安装可以将安装的套件及版本资讯记录在package.json,除了可以设定版本的自动更新外,也可以在专案搬迁时,更容易还原安装套件。

一般相依性安装

  1. NPM套件安装时,加入--save会将套件程序码存到专案路径下的node_modules资料夹,这边以ramda套件为例。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980ndnHVZ5EDw.png

https://ithelp.ithome.com.tw/upload/images/20210930/20139980hbSXDFOTu5.png

  1. 同时ramda套件的版本也会被记录到package.json档案的dependencies,表示专案中的程序与ramda套件有相依性,执行环境中也需要有ramda套件,记录的方式是"<套件名称>": "<套件版本>",若在套件版本前加入^符号,表示在还原套件时自动安装最新的次版本或是修订版本,加入~符号的话仅会查询安装最新的修订版本。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980mc026IAqSo.png

  1. 安装後的套件模组可以用require引入,当require参数不具路径前赘字./的时候,会先查找NodeJS内建的模组,然後是package_module里安装的模组。
const R = require("ramda");
  1. 以之前练习的server.js引入ramda模组後做测试,顺利的取用其中的方法。
let http = require("http");
let fs = require("fs");
const R = require("ramda");

let a = R.concat("Chw", "K");
http.createServer(function(req,res){
  let obj = {
    firstName: "Chw",
    lastName: "K",
    fullName: a
  };
  res.writeHead(200, {"contentType": "application/json"});
  res.end(JSON.stringify(obj));
}).listen(1324,"127.0.0.1");

https://ithelp.ithome.com.tw/upload/images/20210930/20139980n8FiRTwiiu.png

开发相依性安装

  1. 开发相依性安装是透过--save-dev选项进行安装,一样会将套件程序码下载并储存。

https://ithelp.ithome.com.tw/upload/images/20210930/201399802gcVpGcXch.png

  1. 在package.json中会将套件版本资讯纪录在devDependencies之下,以表示此套件是在专案开发时使用,在仅需执行此专案的情况下不需要重建此套件。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980eQUThj4OjP.png

全域安装

  1. 全域安装通常用在经常性使用的套件,在npm install中加入-g,可以将套件进行全域安装,OS环境中的全域安装需以sudo身份进行。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980T8NP9cpfiD.png

  1. 这里用的范例套件是nodemon,用於自动reload修改的程序,是直接透过终端机执行的套件,启动後在每次程序码修改後都会自动重新执行程序码。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980OF16Eh0ill.png

小结

NPM的套件真的非常便利且包罗万象,但还是需要花点心思了解,由於每个套件可能也有相依的套件,如果一昧的安装使用,可能会导致专案占满记忆体空间,而有些没有纪录在package.json的安装套件,例如透过全域安装下载的套件,管理上会比较没有这麽方便,也是需要多注意,NPM的部份就先告一段落,接下来是实际运用了。

参考资料

https://ramdajs.com/docs/

https://nodemon.io

https://www.npmjs.com

Learn and Understand NodeJS [课程]


<<:  JavaScript Array | 与其他程序语言很不同的阵列(上)

>>:  Day 15 JavaScript NodeList vs HTMLCollection

Day 08 CSS <文本属性>

CSS Text 属性可定义文本的外观 例如 : 文本的颜色、对齐文本、装饰文本、文本缩进、行间距 ...

通用标准评估--安全目标(ST)

-通用标准评估 安全目标(Security Target:ST) 供应商可以在安全目标(ST)中指...

Day 06 CSS <复合选择器>

CSS的选择器分为基础选择器以及复合选择器 本日将将继续说明复合选择器 复合选择器可以更准确更高效的...

[3D地图-CesiumJS系列] 一、快速上手

今天要来介绍3D地图的一个API,CesiumJS。 CesiumJS为一个开源JavaScript...

[Day17] Tableau 轻松学 - 美化仪表板外观

前言 仪表板同样也可以进行外观美化设定,这里要特别注意的是只能针对仪表板的样式做设定,而不能针对单一...