ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、概述 npm(cnpm)是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种。 1. 允许用户从NPM服务器下载别人编写的第三方包到本地使用。 2. 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 3. 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 >[danger] 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') 的方式就好,无需指定第三方包路径; 实例如下: ![](https://img.kancloud.cn/ed/24/ed24441908093f84884b48c32b8bacb0_544x118.png) ## 三、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文件中的版本号也会随着更新。