npm运行多个server npm-run-all通知执行多个任务
安装
npm install npm-run-all --save-dev
官网地址: https://www.npmjs.com/package/npm-run-all
--parallel
: 并行运行多个命令,例如:npm-run-all --parallel lint build
--serial
: 多个命令按排列顺序执行,例如:npm-run-all --serial clean lint build:**
--continue-on-error
: 是否忽略错误,添加此参数 npm-run-all 会自动退出出错的命令,继续运行正常的
--race
: 添加此参数之后,只要有一个命令运行出错,那么 npm-run-all 就会结束掉全部的命令
使用方法
这个包提供三个命令,分别是 npm-run-all
run-s
run-p
,其中后两个都是 npm-run-all
带参数的简写,分别对应串行和并行。
顺序执行 --serial
(默认)
npm-run-all clean lint build
// 或
npm-run-all --serial clean lint build
依次执行三个任务,注意如果某个脚本退出时返回值为空值,那么后续脚本默认是不会执行的,你可以使用参数 --continue-on-error
来规避这种行为。
并行执行 --parallel
npm-run-all --parallel lint build
同时执行这两个任务,需要注意如果脚本退出时返回空值,所有其它子进程都会被 SIGTERM
信号中断,同样可以用 --continue-on-error
参数禁用行为
混合执行,顺序和并行混合
npm-run-all clean lint --parallel watch:html watch:js
这段命令首先按顺序执行 clean
lint
两个脚本,然后同时执行 watch:html
和 watch:js
的任务。
npm-run-all a b --parallel c d --sequential e f --parallel g h i
# or
npm-run-all a b --parallel c d --serial e f --parallel g h i
这段命令通过以下顺序执行:
- 顺序运行
a
和b
; - 然后同时运行
c
和d
; - 再依次运行
e
和f
; - 最后同时执行
g
,h
,i
。
- 顺序运行
实战
项目中有多个启动项:
"scripts": {
"dev:common": "cross-env PROJECT_NAME=common vue-cli-service serve",
"dev:projectA": "cross-env PROJECT_NAME=projectA vue-cli-service serve",
"dev:projectB": "cross-env PROJECT_NAME=projectB vue-cli-service serve",
"dev:projectC": "cross-env PROJECT_NAME=projectC vue-cli-service serve",
"dev:projectD": "cross-env PROJECT_NAME=projectD vue-cli-service serve",
"build:common": "cross-env PROJECT_NAME=common vue-cli-service build",
"build:projectA": "cross-env PROJECT_NAME=projectA vue-cli-service build",
"build:projectB": "cross-env PROJECT_NAME=projectB vue-cli-service build",
"build:projectC": "cross-env PROJECT_NAME=projectC vue-cli-service build",
"build:projectD": "cross-env PROJECT_NAME=projectD vue-cli-service build"
},
如果添加一个启动项,可以同时启动 dev:common ; dev:projectA ; dev:projectD ; dev:projectC ; dev:projectD
添加命令如下:
"dev":"npm-run-all --parallel dev:*"
运行命令 npm run dev,会启动很多
如果添加了命令为:"dev:all":"npm-run-all --parallel dev:*",则运行 npm run dev:all 会死循环,因为 dev:*,包含自身 dev:all