前言
什么是npm?
- npm 是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具,也是世界上最大的软件注册表,里面包含超过 600000 个 包的结构,能够使您轻松跟踪依赖项和版本.
前端同学在平时工作中经常用npm安装包进行包管理,每次用的时候有些命令和参数都要去查一次,这次就自己把这些命令整理下,让自己可以多记住一些。
主要记录一下NPM几个常用命令和参数的意思
NPM命令详解
安装模块
1 | npm init
- 这个命令会在当前目录初始化生成一个package.json文件,这个文件中会记录一些关于项目的信息,比如:项目的作者,git地址,入口文件、命令设置、项目名称和版本号package版本等等,一般情况下这个文件是必须要有的,方便后续的项目添加和其他开发人员的使用。
2 | npm install packagename
- 最常用的命令安装具体的package,
默认是安装最新版本的package。
3 | npm install packagename@0.0.1
- 安装指定版本的package,需要在package后指定版本
4 | npm install packagename --save 或 -S
--save、-S参数意思是把模块的版本信息保存到dependencies(生产环境依赖)中,即你的package.json文件的dependencies字段中。
5 | npm install packagename --save-dev 或 -D
-
--save-dev 、 -D参数意思是把模块版本信息保存到devDependencies(开发环境依赖)中,即你的package.json文件的devDependencies字段中。这里解释一下为什么会有两个环境的依赖安装,比如
ts只在开发环境对代码进行规范,生产环境不需要ts这个依赖,所以只需要安装在开发环境。有的依赖只有生产环境需要,只需要安装到生产环境。
6 | npm install packagename --save-optional 或 -O
--save-optional 、 -O参数意思是把模块安装到optionalDependencies(可选环境依赖)中,即你的package.json文件的optionalDependencies字段中。
7 | npm install packagename -g 或 --global
- 安装全局的模块(不加参数的时候默认安装本地模块,全局安装在npm的缓存文件夹里,默认本地安装在本地项目的文件夹。)
卸载
#卸载当前项目或全局模块
$ npm uninstall packagename [-g]
eg: npm uninstall gulp --save-dev
npm i gulp -g
卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:
npm ls 查看安装的模块
更新
#升级当前项目或全局的指定模块
$ npm update <name> [-g]
//eg: npm update express
npm update express -g
npm run 执行脚本
package.json的scripts字段,可以用于指定脚本命令,供npm直接调用。npm run会创建一个Shell,执行指定的命令。
两个命令简写,start和test属于特殊命令,可以省略run,其余的都得带上run。
npm run的参数。
- 如果不加任何参数,直接运行,会列出
package.json里面所有可以执行的脚本命令
npm run dev
' npm run dev ':实际执行的是npx webpack serve --config ./config/webpack.dev.js 会找到一个可执行shell脚本
npm run 执行操作
- 运行 npm run xxx的时候,npm 会先在当前目录的 node_modules/.bin 查找要执行的程序,如果找到则运行;
- 没有找到则从全局的 node_modules/.bin 中查找,npm i -g xxx就是安装到到全局目录;
- 如果全局目录还是没找到,那么就从 path 环境变量中查找有没有其他同名的可执行程序。
npm run 的两个钩子
执行顺序
一个npm脚本可以执行多个任务,这些任务之间可以指定不同的执行顺序。
'&' 并行执行顺序,同时执行
"dev":"node test.js & webpack"
'&&'继发顺序,执行前面之后才可以执行后面
"dev":"node test.js && webpack"
顺序钩子
npm脚本自带两个顺序钩子,'pre' 和 'post'
"predev":"node test_one.js",
"dev":"node test_two.js",
"postdev":"node test_three.js"
当执行 npm run dev 的时候默认就会执行
npm run predev && npm run dev && npm run postdev
先执行pre钩子,最后执行post钩子