myscript这个脚本命令
1、什么是npm脚本
在创建node.js项目如一个vue项目,或一个react项目时,项目城市生成一个描述文件package.json 。
好比npm允许在package.json文件里面,使用scripts字段界说脚本命令。
{ //... "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "e2e": "node test/e2e/runner.js", "test": "npm run e2e", "lint": "eslint --ext .js,.vue src test/e2e/specs", "build": "node build/build.js" }, }
上面代码是package.json文件的一个片段,里面的scripts字段是一个东西。它的每一个属性,对应一段脚本。好比,build命令对应的脚本是node build.js 。
命令行下使用npm run 命令,就可以执行这段脚本。
$ npm run build
等同于执行:
$ node build/build.js
同理,上面的那段scripts中, npm run test 等同于 npm run e2e , 等同于 node test/e2e/runner.js
这些界说在package.json里面的脚本,就称为npm脚本。项目的相关脚本,可以集中在一个处所;差别项目的脚本命令,只要成果不异,就可以有同样的对外接口。好比用户不需要知道怎么测试你的项目,只要运行 npm run dev 即可
检察当前项目的所有npm脚本命令,可以使用不带任何参数的 npm run 命令。
$ npm run
2、npm道理
npm脚本的道理非常简单。每当执行 npm run ,就会自动创建一个shell脚本, 在这个shell里面执行指定的脚本命令。因此,只需要是shell (一般是bash) 可以运行的命令,就可以写在npm脚本里面。
对照特另外是,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中执行,因此它不必然是Node脚本,任何可执行文件都可以写在里面。npm脚本的退出码,也遵守shell脚本法则。如果退出码不是0,npm 就认为这个脚本执行掉败。
3、通配符
由于npm脚本就是shell脚本,因此可以使用shell通配符。
"lint": "jshint *.js" "lint": "jshint **/*.js"
上面代码中,* 暗示任意文件名,**暗示任意一层子目录。如果要将通配符传入原始命令,防备被shell转义,要将*号转义。
"test": "tap test/\*.js"
4、传参
向npm脚本传入参数,要使用 -- 标明。
"lint": "jshint **.js"
向上面的 npm run lint 命令传入参数,必需写成下面这样。
$ npm run lint -- --reporter checkstyle > checkstyle.xml
也可以再package.json里面封装一个命令。
"lint": "jshint **.js", "lint:checkstyle": "npm run lint -- --reporter checkstyle > checkstyle.xml"
5、执行挨次
如果npm脚本里面需要执行多个任务,那么需要明确它们的执行挨次。如果是并行执行(即同时的平行执行),可以使用 & 标记。
$ npm run script1.js & npm run script2.js
如果是继发执行(即只有前一个任务告成,才华执行下一个任务),可以使用 && 标记。
$ npm run script1.js && npm run script2.js
6、默认值
一般来说,npm脚本由用户供给。但是,npm对两个脚本供给了默认值。也就是说,这两个脚本不用界说,就可以直接使用。
"start": "node server.js", "install": "node-gyp rebuild"
上面代码中,npm run start 的默认值是 node server.js, 前提是项目根目录下有server.js这个脚本;npm run install 的默认值是node-gyp rebuild, 前提是项目根目录下有binding.gyp文件。
7、钩子
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
因此,可以在这两个钩子里面,完成一些筹备事情和清理事情。下面是一个例子:
"clean": "rimraf ./dist && mkdir dist", "prebuild": "npm run clean", "build": "cross-env NODE_ENV=production webpack"
npm默认供给下面的这些钩子:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32695.html
- 上一篇: 五、DllPlugin 在上个段落中的结尾处
- 下一篇:有兴趣的同学也可以来体验一下