【问题标题】:Run node server in background and start karma from npm script在后台运行节点服务器并从 npm 脚本启动 karma
【发布时间】:2018-10-02 18:42:41
【问题描述】:

我想在后台运行节点服务器并启动 karma(在 win7 上)。编写如下所示的 bash 脚本(并使用 git bash 运行)似乎可以工作,但它会报告到一个单独的窗口而不是 WebStorm 终端:

#!/bin/bash

node test/server/index.js &
karma start karma.conf.js

package.json

  "scripts": {
    "test": "test.sh"
  },

如果我用 git bash 和 bash test.sh 尝试它,那么它会报告到同一个窗口。

我尝试在 npm 中做类似的事情,但它无法运行后台进程。

  "scripts": {
    "test": "node test/server/index.js & karma start karma.conf.js"
  },

无论我如何尝试,它只能在单个进程中运行,所以它等待节点服务器退出,因此业力服务器永远不会启动。

知道如何解决向 WebStorm 终端或 npm 并行化的 bash 报告吗?

更新:

我想我找到了原因:https://github.com/npm/npm/issues/8358 这似乎是与 Windows 相关的问题。在 Linux 上它可以正常工作。因此无法修复 npm 脚本。我认为代替 bash,我会将业力服务器和节点服务器移动到节点脚本,并为节点服务器创建一个子进程以与 Windows 兼容。我希望业力日志会以这种方式显示在 WebStorm 终端中。

【问题讨论】:

    标签: bash npm webstorm


    【解决方案1】:

    跨平台shell并行化解决方案

    我有一点时间在该主题中进行更多搜索。实际上有可用于 npm 和 shell 脚本的并行化工具,它们是跨平台的:

    有一个将所有这些项目与其他项目合并的倡议,这或多或少是成功的:https://github.com/mysticatea/npm-run-all/issues/10。根据其中一位贡献者的说法,npm-run-all 现在很棒,另一方面,npm-run-all repo 现在似乎并不那么活跃,所以最好使用并发或 shell-executor。

    WebStorm 设置/Git bash 解决方案

    我将 WebStorm 终端设置为 git bash 而不是 cmd.exe:

    File/Settings > Tools/Terminal > Shell path: "C:\Program Files\Git\bin\bash.exe" > Ok
    

    我将 npm 脚本更改为使用 bash 运行:

      "scripts": {
        "test": "bash -c \"node test/server/index.js & karma start karma.conf.js\""
      },
    

    希望 bash 命令在 Linux 上也能正常工作,我必须咨询 Travis,但很有可能。

    对 sh 文件使用 bash 命令也可以:

      "scripts": {
        "test": "bash test.sh"
      },
    

    npm shell 配置是否可行?

    有趣的是,不使用 bash 命令,上面的解决方案不起作用。可能 npm 使用 cmd.exe 启动它,当它检查标题并意识到它是一个 bash 脚本时,它会在新窗口中打开 bash.exe。是的,我检查了一下,它默认使用 cmd.exe:

    $ npm config ls -l | grep shell
    shell = "C:\\Windows\\system32\\cmd.exe"
    

    所以另一种选择可能是将 npm shell 设置为 git bash,之后我不必在我的脚本中使用 bash

    npm config set shell "C:\Program Files\Git\bin\bash.exe"
    

    嗯,我确实做到了,但没有任何改变。我仍然必须在我的脚本中使用bash,并且 sh 文件仍然会在新窗口中打开。这并没有真正的区别,我们仍然需要 Webstorm 设置来使用 bash 运行脚本,所以它不是解决方案

    【讨论】:

      猜你喜欢
      • 2020-03-06
      • 2020-11-17
      • 1970-01-01
      • 2013-11-05
      • 2018-06-26
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多