如何自动停止npm脚本在后台运行

2024-07-01

我使用 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' 这是:

  1. 当您使用在后台运行命令时bashshell(这就是当你添加&到最后),你可以使用发现它的PID$!,但仅在命令运行后立即执行。 (看高级 Bash 脚本指南:第 9 章。另眼看变量 - 9.1。内部变量 http://tldp.org/LDP/abs/html/internalvariables.html#PIDVARREF其描述。)
  2. 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(使用前将#替换为@)

如何自动停止npm脚本在后台运行 的相关文章

随机推荐