我使用 npm 脚本,其中一些脚本应该并行运行。我有这样的事情:
...
scripts: {
"a": "taskA &",
"preb": "npm run a",
"b": "taskB"
}
...
这可以!但我想在任务B完成后自动终止运行后台的任务A。
我怎样才能做到这一点?
谢谢!
我不认为 npm 是管理流程之间复杂关系的最佳工具。
通过创建一个使用节点的节点脚本,您会得到更好的服务child_process http://nodejs.org/api/child_process.html管理协进程的启动和终止的模块,也许使用spawn http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options.
话虽如此,并本着始终努力提供直接、可用答案的精神。
您可以构建您的 npm 脚本,例如 (assumesbash 外壳):
scripts:{
runBoth: "npm runA & npm runB", // run tasks A and B in parallel
runA: "taskA & TASKA_PID=$!", // run task A and capture its PID into $TASKA_PID
runB: "taskB && kill $TASKA_PID" // run task B and if it completes successfully, kill task A using its saved PID
}
唯一的 'magic' 这是:
- 当您使用在后台运行命令时
bash
shell(这就是当你添加&
到最后),你可以使用发现它的PID$!
,但仅在命令运行后立即执行。 (看高级 Bash 脚本指南:第 9 章。另眼看变量 - 9.1。内部变量 http://tldp.org/LDP/abs/html/internalvariables.html#PIDVARREF其描述。)
- taskB must成功时调用 process.exit(0) 或失败时调用 process.exit(-1)
&&
测试处理正确。 (看这个答案 https://unix.stackexchange.com/questions/100704/difference-between-executing-multiple-commands-with-and#122759了解更多信息。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)