运行 节点服务器在后台并从 npm 脚本启动 karma
Run node server in background and start karma from npm script
我想 运行 在后台运行一个节点服务器并启动 karma(在 win7 上)。写一个像下面这样的 bash 脚本(和 运行 它与 git bash)似乎工作,但它报告给一个单独的 window 而不是 WebStorm终端机:
#!/bin/bash
node test/server/index.js &
karma start karma.conf.js
package.json
"scripts": {
"test": "test.sh"
},
如果我尝试使用 git bash 和 bash test.sh
然后它报告相同的 window.
我试图在 npm 中做类似的事情,但它不能 运行 后台进程。
"scripts": {
"test": "node test/server/index.js & karma start karma.conf.js"
},
无论我如何尝试它都只能在一个进程中运行,所以它等待节点服务器退出,因此业力服务器永远不会启动。
知道如何解决 bash 向 WebStorm 终端报告或 npm 并行化吗?
更新:
我想我找到了原因:https://github.com/npm/npm/issues/8358 这似乎是一个 Windows 相关的问题。在 Linux 上它会正常工作。所以修复 npm 脚本是不可能的。我认为我会将 karma 服务器和节点服务器移动到节点脚本,而不是 bash,并为节点服务器创建一个子进程,使其与 Windows 兼容。我希望业力日志将以这种方式显示在 WebStorm 终端中。
Cross-platformshell并行化解决方案
我有一点时间在主题中搜索更多内容。实际上有可用于 npm 和 shell 脚本的并行化工具,它们是 cross-platform:
- https://github.com/mysticatea/npm-run-all
- https://github.com/kimmobrunfeldt/concurrently
- https://github.com/royriojas/shell-executor
有一项计划将所有这些项目与其他项目合并,或多或少是成功的:https://github.com/mysticatea/npm-run-all/issues/10。根据其中一位贡献者的说法,npm-run-all 现在很棒,另一方面,npm-run-all 回购现在似乎并不那么活跃,所以最好同时使用或 shell-executor .
WebStorm设置/Gitbash解决方案
我将 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 启动它,当它检查 header 并意识到它是一个 bash 脚本时,它在新的 window 中打开了 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 文件仍会在新的 window 中打开。它并没有真正的区别,我们仍然需要将 Webstorm 设置为 运行 带有 bash 的脚本,所以它 不是解决方案 。
我想 运行 在后台运行一个节点服务器并启动 karma(在 win7 上)。写一个像下面这样的 bash 脚本(和 运行 它与 git bash)似乎工作,但它报告给一个单独的 window 而不是 WebStorm终端机:
#!/bin/bash
node test/server/index.js &
karma start karma.conf.js
package.json
"scripts": {
"test": "test.sh"
},
如果我尝试使用 git bash 和 bash test.sh
然后它报告相同的 window.
我试图在 npm 中做类似的事情,但它不能 运行 后台进程。
"scripts": {
"test": "node test/server/index.js & karma start karma.conf.js"
},
无论我如何尝试它都只能在一个进程中运行,所以它等待节点服务器退出,因此业力服务器永远不会启动。
知道如何解决 bash 向 WebStorm 终端报告或 npm 并行化吗?
更新:
我想我找到了原因:https://github.com/npm/npm/issues/8358 这似乎是一个 Windows 相关的问题。在 Linux 上它会正常工作。所以修复 npm 脚本是不可能的。我认为我会将 karma 服务器和节点服务器移动到节点脚本,而不是 bash,并为节点服务器创建一个子进程,使其与 Windows 兼容。我希望业力日志将以这种方式显示在 WebStorm 终端中。
Cross-platformshell并行化解决方案
我有一点时间在主题中搜索更多内容。实际上有可用于 npm 和 shell 脚本的并行化工具,它们是 cross-platform:
- https://github.com/mysticatea/npm-run-all
- https://github.com/kimmobrunfeldt/concurrently
- https://github.com/royriojas/shell-executor
有一项计划将所有这些项目与其他项目合并,或多或少是成功的:https://github.com/mysticatea/npm-run-all/issues/10。根据其中一位贡献者的说法,npm-run-all 现在很棒,另一方面,npm-run-all 回购现在似乎并不那么活跃,所以最好同时使用或 shell-executor .
WebStorm设置/Gitbash解决方案
我将 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 启动它,当它检查 header 并意识到它是一个 bash 脚本时,它在新的 window 中打开了 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 文件仍会在新的 window 中打开。它并没有真正的区别,我们仍然需要将 Webstorm 设置为 运行 带有 bash 的脚本,所以它 不是解决方案 。