NPM scripts 使用
npm 脚本功能是最常用的功能之一。运行 npm run <script_name>
会执行当前项目的 package.json
中 scripts
属性下对应 script_name
的
脚本。
简单使用
使用 scripts
字段定义脚本命令。
"scripts": {
"build": "node build.js"
}
使用 npm run
命令,就可以执行这段脚本:
npm run build
原理
npm run
会创建一个 Shell,执行指定的命令,并临时将 node_modules/.bin
加入 PATH
变量,执行结束后,再将 PATH
变量恢复原样。
也就说 node_modules/.bin
子目录里面的脚本,都可以直接用脚本名调用。比如,当前项目的依赖里面有 Mocha
,只要直接写 mocha test
就可以了。
"test": "mocha test"
// 而不用写成下面这样。
"test": "./node_modules/.bin/mocha test"
npm 脚本的退出码,也遵守 Shell 脚本规则。如果退出码不是 0,npm 就认为这个脚本执行失败。
传参
向 npm 脚本传入参数,要使用 --
隔开,--
后面的内容都会原封不动地传给运行的命令。
"test": "mocha test"
向上面的 npm test
命令传入参数,必须写成下面这样。
npm test -- --reporter spec
也可以封装在 package.json
里面。
"test": "mocha --reporter spec"
钩子
在 npm script
中有两个钩子 pre
和 post
。例如上面的 test
脚本:
"scripts":{
"pretest": "echo run before the test script"
"test": "mocha --reporter spec",
"posttest": "echo run after the test script"
}
执行 npm test
的时候,会自动按照下面的顺序执行。
npm run pretest && npm run test && npm run posttest
简写形式
四个常用的 npm 脚本有简写形式。
npm start
是npm run start
npm stop
是npm run stop
的简写npm test
是npm run test
的简写npm restart
npm restart
是一个复合命令,它不单单执行 prerestart
, restart
, postrestart
具体的执行顺序如下:
- prerestart
- prestop
- stop
- poststop
- restart
- prestart
- start
- poststart
- postrestart
环境变量
npm 脚本可以访问 package.json
中的变量。
通过 process.env.npm_package_xxx
可以获得,比如,下面是一个 package.json
。
{
"name": "foo",
"version": "1.2.5",
"scripts": {
"view": "node view.js"
}
}
process.env.npm_package_name // foo
process.env.npm_package_version // 1.2.5
process.env.npm_package_scripts_view //node view.js
npm 脚本可以访问 npm 的配置变量。
通过 process.env.npm_config_xxx
可以获得,即 npm config get xxx
命令返回的值。
例如 process.env.npm_config_user_email
可以拿到 user.email
的值。