共计 1993 个字符,预计需要花费 5 分钟才能阅读完成。
npm 脚本概念
npm 容许在 package.json
文件中应用 scripts
字段定义脚本:
{
// ...
"scripts": {"build": "node build.js"}
}
执行脚本:
$ npm run build
查看所有可用脚本:
$ npm run
脚本执行原理
每当执行 npm run
,命令会主动新建一个 Shell,在这个 Shell 外面执行指定的脚本命令。因而,只有是 Shell 能够运行的命令,就能够写在 npm 脚本外面。
npm run
会将当前目录的 node_modules/.bin
子目录退出 PATH
变量中,执行完结后,再将 PATH
变量复原原样。
所以,node_modules/.bin
子目录外面的所有脚本,都能够间接用脚本名调用,而不用加上门路。
npm 脚本的惟一要求是能够在 Shell 中执行,因而它不肯定是 Node 脚本,任何可执行文件都能够写在外面。
脚本通配符
"lint": "jshint *.js"
"lint": "jshint **/*.js"
下面代码中,*
示意任意文件名,**
示意任意一层子目录。
脚本传参
--
后的内容会原样传给命令。
$ npm run command1 -- param
或者再封装一个命令:
"command1": "node test.js",
"command2": "npm run command1 -- param"
$ npm run command2
执行程序
并行执行:
$ npm run script1.js & npm run script2.js
串行执行:
$ npm run script1.js && npm run script2.js
默认脚本
npm 提供了两个默认脚本,这两个脚本不必定义,能够间接应用:
"start": "node server.js"
"install": "node-gyp rebuild"
脚本钩子
npm 脚本有 pre
和post
两个钩子。举例来说,build
脚本命令的钩子就是 prebuild
和postbuild
。
"prebuild": "echo I run before the build script",
"build": "cross-env NODE_ENV=production webpack",
"postbuild": "echo I run after the build script"
用户执行 npm run build
的时候,会主动依照上面的程序执行。
npm run prebuild && npm run build && npm run postbuild
因而,能够在这两个钩子外面,实现一些筹备工作和清理工作。
npm 默认提供上面这些钩子
- prepublish,postpublish
- preinstall,postinstall
- preuninstall,postuninstall
- preversion,postversion
- pretest,posttest
- prestop,poststop
- prestart,poststart
- prerestart,postrestart
简写
四个罕用的 npm 脚本有简写模式。
npm start
是npm run start
的简写npm stop
是npm run stop
的简写npm test
是npm run test
的简写npm restart
是npm run stop && npm run restart && npm run start
的简写
package 变量
通过 npm_package_
前缀,npm 脚本能够拿到 package.json
外面的字段。比方,上面是一个package.json
。
{
"name": "foo",
"version": "1.2.5",
"scripts": {"view": "node view.js"}
}
// view.js
console.log(process.env.npm_package_name); // foo
console.log(process.env.npm_package_version); // 1.2.5
通过环境变量 process.env
对象,能够拿到 package.json
的字段值。如果是 Bash 脚本,能够用 $npm_package_name
和$npm_package_version
取到这两个值。
npm_package_
前缀也反对嵌套的 package.json
字段。
"repository": {
"type": "git",
"url": "xxx"
},
scripts: {"view": "echo $npm_package_repository_type"}
能够通过 npm_package_repository_type
取到 repository
字段的 type
属性。
config 配置变量
npm 脚本还能够通过 npm_config_
前缀,拿到 npm 的配置变量,即 npm config get xxx
命令返回的值。比方,以后模块的发行标签,能够通过 npm_config_tag
取到。
"view": "echo $npm_config_tag",