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

Javascript 如何自动停止后台运行的npm脚本,javascript,node.js,build,background,npm,Javascript,Node.js,Build,Background,Npm,我使用npm脚本,我有一些应该并行运行的脚本。我有这样的想法: ... scripts: { "a": "taskA &", "preb": "npm run a", "b": "taskB" } ... 这很好!但是我想在taskB完成后自动杀死运行后台的taskA 我该怎么做? 谢谢 我不认为npm是管理流程之间复杂关系的最佳工具 如果创建一个节点脚本,使用节点的模块来管理协同进程的启动和终止,可能会更好 话虽如此,本着总是试图提供一个直接的、有用的答案的精神 您

我使用npm脚本,我有一些应该并行运行的脚本。我有这样的想法:

...
scripts: {
   "a": "taskA &",
   "preb": "npm run a",
   "b": "taskB"
}
...
这很好!但是我想在taskB完成后自动杀死运行后台的taskA

我该怎么做?
谢谢

我不认为npm是管理流程之间复杂关系的最佳工具

如果创建一个节点脚本,使用节点的模块来管理协同进程的启动和终止,可能会更好

话虽如此,本着总是试图提供一个直接的、有用的答案的精神

您可以将您的npm脚本构造为(假设bash shell):

这里唯一的“魔力”是:

  • 当您在后台使用
    bash
    shell运行命令时(这是在末尾添加
    &
    时发生的情况),您可以使用
    $发现它,但仅在命令运行后立即执行。(有关其说明,请参见。)
  • taskB必须调用进程。成功时退出(0),失败时退出(-1),以便正确处理
    &
    测试。(有关详细信息,请参阅。)

  • npm run all
    包可能就是您想要的:

    $ npm install --save npm-run-all
    
    然后在
    package.json
    文件中:

    "scripts": {
        "runA": "taskA",
        "runB": "taskB",
        "runBoth": "npm-run-all -p runA runB"
    }
    
    -p
    并行运行它们,使用
    -s
    进行顺序操作。)

    使用看起来不那么棘手和痛苦。这避免了将分离的进程(
    &
    )放在一起。而且也承诺会更加跨平台

    npm install concurrently --save
    
    然后在package.json中


    也经过测试(在Ubuntu 16.04、npm 5.6下)。

    谢谢你的Bash技巧!太棒了。你的答案就是我一直在寻找的答案。我认为runB没有从runA访问$TASK\u PID的权限。@prongs-好的,什么是opsys?node的哪个版本?如果我不知道您的设置,很难帮助。;)mac和所有最新的东西。基本上变量没有设置,因此kill不会发生。谢谢,这正是我想要的。如果你在结尾加上符号,它甚至会在后台运行这个脚本。(例如:
    “npm运行all-p runA runB&”
    )效果很好完成后,请确保使用
    killall节点。
    :D
    npm install concurrently --save
    
    "runBoth": "concurrently \"npm run taskA\" \"npm run taskB\"",