NPM 运行脚本

有时候,运行一个工程,可能须要执行多个脚本。如须要执行客户端代码的 webpack 打包,还要执行服务端代码的 webpack 打包,当服务端代码进行 webpack 进行打包后,还要重新启动服务器等。

基于这样一个需要,能够应用 npm 钩子,cross-env,better-npm-run 和 npm-run-all 来优化 NPM 运行脚本。

npm 钩子

npm 默认提供上面这些钩子

prepublish,postpublishpreinstall,postinstallpreuninstall,postuninstallpreversion,postversionpretest,posttestprestop,poststopprestart,poststartprerestart,postrestart

npm run install 默认执行程序:npm run preinstall > npm run install > npm run postinstall

cross-env

cross-env 跨平台环境变量设置

Mac Window node scripts 设置环境变量兼容插件

Node.js10 以及更高版本,npm install cross-env -DNode.js8 以及更低版本,npm install cross-env@6 -D{  "scripts": {    "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"  }}

better-npm-run

better-npm-run 长命令独自拎进去写

"scripts": {    "build:dev": "better-npm-run build-dev",    "build:prod": "better-npm-run build-prod",    "test": "better-npm-run test"},"betterScripts": {    "build-dev": "webpack --config $npm_package_webpack --progress --colors",    "build-prod": {        "command": "webpack --config $npm_package_webpack --progress --colors",        "env": {            "NODE_ENV": "production"        }    },    "test": {        "command": "karma start",        "env": {            "NODE_ENV": "test"        }    }}

npm-run-all

npm-run-all 同时组织执行多个脚本

运行 npm run dev,会一次执行 dev:start、dev:build:client、dev:build:server 命令

npm install npm-run-all -D{    "dev": "npm-run-all --serial dev:**",    "dev:start": "nodemon --watch build exec node \"build/bundle.js\"",    "dev:build:client": "webpack --config webpack.config.client.js --watch",    "dev:build:server": "webpack --config webpack.config.server.js --watch"}多种运行多个命令的形式:默认 --serial    --parallel: 并行运行多个命令        npm-run-all --parallel lint build 或        run-p lint build    --serial: 多个命令按排列程序执行        npm-run-all --serial clean lint build:** 或        run-s clean lint build:**    --continue-on-error:        是否疏忽谬误,增加此参数 npm-run-all 会主动退出出错的命令,持续运行失常的    --race:        增加此参数之后,只有有一个命令运行出错,那么 npm-run-all 就会完结掉全副的命令Glob-like 名称匹配    你能够应用 Glob 通配符来匹配工作名称,不便指定多个名称类似的工作    npm-run-all --parallel watch:*        不匹配分隔符,同时运行 watch:html watch:js 但不运行 watch:js:index。    npm-run-all --parallel watch:**        匹配分隔符,所有以 watch: 结尾的脚本都会被运行。