一、概述

npm(cnpm)是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种。

  1. 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  2. 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  3. 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

bower及yarn都是与npm类似的包管理工具,不过npm用得更多;

二、npm install 命令

npm 安装 Node.js 模块语法:npm install =npm i,在git clone项目的时候,项目文件中并没node_modules文件夹,项目的依赖文件可能很大。直接执行,npm会根据package.json配置文件中的依赖配置下载安装。注意,要在项目的根目录下。后缀:-global = -g,全局安装,安装后的包位于系统预设目录下;--save= -S,安装的包将写入package.json里面的dependencies,dependencies:生产环境需要依赖的库;--save-dev= -D,安装的包将写入packege.json里面的devDependencies,devdependencies:只有开发环境下需要依赖的;

$ npm install <Module Name>

如:使用 npm 命令安装常用的 Node.js web框架模块 express:

$ npm install express

安装好之后,express 包就放在了工程目录下的node_modules目录中,因此在代码中只需要通过 require('express') 的方式就好,无需指定第三方包路径;实例如下:

npm都有哪些参数(极简Npm快速了解)(1)

三、npm update 命令

与npm install差异是一个是新安装,一个是更新,用法是一样的;更新全局包:

npm update <name> -g

更新生产环境依赖包,将更新信息记录到 package.json 文件中:

npm update <name> --save

更新开发环境依赖包,将更新信息记录到 package.json 文件中:

npm update <name> --save-dev

四、npm run ***命令

npm run ***其实执行了package.json中的script脚本;***可以理解为键值对的 key,实际上 run 的是在 package.json 里面 scripts 配置的 value;

五、npm安装包的类型

npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已;本地安装:安装在当前目录下的,也就是说,只有在当前目录下才可以使用安装的本地包,安装模块到项目node_modules目录下。;全局安装:全局安装的包直接安装到计算机中,只需安装一次,以后在计算机的任何位置都可以使用这个包,不会在项目node_modules目录中保存模块包;

npm install moduleName # 安装模块到项目node_modules目录下 npm install -g moduleName # -g 将模块安装到全局,具体安装到磁盘哪个位置,要看 npm config prefix 的位置。 npm install -save moduleName # -save 将模块安装到项目node_modules目录下,并在package文件的dependencies节点写入依赖。 npm install -save-dev moduleName # -save-dev 将模块安装到项目(当其他人下载工程后,可以通过npm install下载到该依赖包)node_modules目录下,并在package文件的devDependencies节点写入依赖(当其他人下载工程后,可以通过npm install下载到该依赖包)。`

六、package-lock.json

NPM v5 引入了 package-lock.json, 将其作为捕获在任意时刻安装的确切依赖树的机制。这会有助于在不同环境中进行协作,在这种环境中,你希望每个人都为项目的特定版本获取依赖项以得到同一棵依赖树。package.json 使用定义所需的依赖项及其各自的版本。但是语义版本控制可能很棘手。而package-lock.json 将描述当前安装的确切依赖树。package.json文件记录你项目中所需要的所有模块。当你执行npm install的时候,node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进行对比,没有的直接下载,已有的检查更新(最新版本的nodejs不会更新,因为有package-lock.json文件,下面再说)。另外,package.json文件只记录你通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。package-lock.json文件锁定所有模块的版本号,包括主模块和所有依赖子模块。当你执行npm install的时候,node从package.json文件读取模块名称,从package-lock.json文件中获取版本号,然后进行下载或者更新。因此,正因为有了package-lock.json文件锁定版本号,所以当你执行npm install的时候,node不会自动更新package.json文件中的模块,必须用npm install packagename(自动更新小版本号)或者npm install packagename@x.x.x(指定版本号)来进行安装才会更新,package-lock.json文件中的版本号也会随着更新。

,