代码之家  ›  专栏  ›  技术社区  ›  inf3rno

在后台运行节点服务器并从NPM脚本启动Karma

  •  0
  • inf3rno  · 技术社区  · 6 年前

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

    #!/bin/bash
    
    node test/server/index.js &
    karma start karma.conf.js
    

    包装袋

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

    如果我用吉特巴什和 bash test.sh 然后报告到同一窗口。

    我尝试在NPM中做类似的事情,但它不能运行后台进程。

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

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

    你知道如何解决向webstorm终端报告的bash或者NPM的并行化吗?

    更新:

    我想我找到了原因: https://github.com/npm/npm/issues/8358 这似乎是与Windows相关的问题。在Linux上,它可以正常工作。所以不可能修复NPM脚本。我认为我将把Karma服务器和节点服务器移到一个节点脚本,并为节点服务器创建一个与Windows兼容的子进程,而不是bash。我希望通过这种方式,业力日志将出现在webstorm终端上。

    1 回复  |  直到 6 年前
        1
  •  0
  •   inf3rno    6 年前

    跨平台壳体并联方案

    我有点时间在这个话题上多找些东西。实际上,NPM和shell脚本有并行化工具,它们是跨平台的:

    有一项倡议,将所有这些项目与其他项目合并,或多或少取得了成功: https://github.com/mysticatea/npm-run-all/issues/10 . 据其中一位撰稿人说,NPM Run All现在很不错,另一方面,NPM Run All回购目前似乎不那么活跃,所以最好是同时使用,或者使用shell执行器。

    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外壳配置是一种可能的解决方案吗?

    有趣的是,如果不使用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"
    

    我确实做到了,但没有改变。我还得用 猛击 在我的脚本中,sh文件仍然在新窗口中打开。这并没有真正的区别,我们仍然需要webstorm设置来运行带有bash的脚本,所以它是 不是解决办法 .