在后台运行节点服务器,并从npm脚本启动业力

时间:2018-10-02 18:42:42

标签: bash npm webstorm

我想在后台运行节点服务器并启动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脚本。我认为,将barma服务器和节点服务器移至节点脚本,而不是bash并为该节点服务器创建与Windows兼容的子进程。我希望通过这种方式将业力日志显示在WebStorm终端中。

1 个答案:

答案 0 :(得分:1)

跨平台外壳并行化解决方案

我有一点时间来搜索更多有关该主题的内容。实际上,有针对npm和shell脚本的并行化工具,它们是跨平台的:

有一项计划将所有这些项目与其他项目合并,这或多或少是成功的:https://github.com/mysticatea/npm-run-all/issues/10。根据其中一位贡献者的观点,npm-run-all现在很棒,另一方面,npm-run-all回购现在似乎不那么活跃,因此可能最好同时使用或使用shell-executor。< / p>

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运行脚本,因此这不是解决方案。