我使用的是 npm 脚本,我有一些脚本应该并行运行。我有这样的东西:
...
scripts: {
"a": "taskA &",
"preb": "npm run a",
"b": "taskB"
}
...
这很好!但是我想在 taskB 完成后自动终止运行后台的 taskA。
我该怎么做? 谢谢!
最佳答案
我不认为 npm 是管理进程之间复杂关系的最佳工具。
创建一个使用 Node 的 child_process
的 Node 脚本会更好。模块来管理协同进程的启动和终止,可能使用 spawn
.
话虽如此,本着始终尝试提供直接、可用的答案的精神..
您可以像这样构造您的 npm 脚本(假设 bash shell):
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
}
这里唯一的“魔法”是:
- 当您使用
bash
shell 在后台运行命令时(将&
添加到末尾时会发生这种情况),您可以使用发现它的 PID code>$!
,但仅在命令运行后立即执行。 (参见 Advanced Bash-Scripting Guide: Chapter 9. Another Look at Variables - 9.1. Internal Variables 的描述。) - taskB 必须在成功时调用 process.exit(0) 或在失败时调用 process.exit(-1) 以便正确处理
&&
测试。 (有关详细信息,请参阅 this answer。)
关于javascript - 如何自动停止在后台运行的npm脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808402/