详解npm参数以及一些常见配置

489 阅读3分钟

前言

什么是npm?

  • npm 是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具,也是世界上最大的软件注册表,里面包含超过 600000 个 包的结构,能够使您轻松跟踪依赖项和版本.

前端同学在平时工作中经常用npm安装包进行包管理,每次用的时候有些命令和参数都要去查一次,这次就自己把这些命令整理下,让自己可以多记住一些。
主要记录一下NPM几个常用命令和参数的意思

NPM命令详解

安装模块

1 | npm init
  1. 这个命令会在当前目录初始化生成一个package.json文件,这个文件中会记录一些关于项目的信息,比如:项目的作者,git地址,入口文件、命令设置、项目名称和版本号package版本等等,一般情况下这个文件是必须要有的,方便后续的项目添加和其他开发人员的使用。
 2 | npm install packagename
  1. 最常用的命令安装具体的package,默认是安装最新版本的package。
3 | npm install packagename@0.0.1
  1. 安装指定版本的package,需要在package后指定版本
4 | npm install packagename --save 或 -S
  1. --save、-S参数意思是把模块的版本信息保存到dependencies(生产环境依赖)中,即你的package.json文件的dependencies字段中。
5 | npm install packagename --save-dev 或 -D
  1. --save-dev 、 -D参数意思是把模块版本信息保存到devDependencies(开发环境依赖)中,即你的package.json文件的devDependencies字段中。

    这里解释一下为什么会有两个环境的依赖安装,比如ts只在开发环境对代码进行规范,生产环境不需要ts这个依赖,所以只需要安装在开发环境。有的依赖只有生产环境需要,只需要安装到生产环境。

6 | npm install packagename --save-optional 或 -O
  1. --save-optional 、 -O参数意思是把模块安装到optionalDependencies(可选环境依赖)中,即你的package.json文件的optionalDependencies字段中。
7 | npm install packagename -g 或 --global
  1. 安装全局的模块(不加参数的时候默认安装本地模块,全局安装在npm的缓存文件夹里,默认本地安装在本地项目的文件夹。)

image.png

卸载

#卸载当前项目或全局模块 
$ 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.jsonscripts字段,可以用于指定脚本命令,供npm直接调用。npm run会创建一个Shell,执行指定的命令。

两个命令简写,starttest属于特殊命令,可以省略run,其余的都得带上run。

npm run的参数。

  • 如果不加任何参数,直接运行,会列出package.json里面所有可以执行的脚本命令

image.png

npm run dev

' npm run dev ':实际执行的是npx webpack serve --config ./config/webpack.dev.js 会找到一个可执行shell脚本

image.png image.png

npm run 执行操作

  1. 运行 npm run xxx的时候,npm 会先在当前目录的 node_modules/.bin 查找要执行的程序,如果找到则运行;
  2. 没有找到则从全局的 node_modules/.bin 中查找,npm i -g xxx就是安装到到全局目录;
  3. 如果全局目录还是没找到,那么就从 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钩子