如何在windows中为npm run-scripts设置shell

时间:2014-04-23 11:47:15

标签: windows shell npm

我在Windows上运行npm并想使用&运行脚本中的样式并行操作 但是在cmd中并行运行有点乱 在我的package.json文件中,我想写 -

scripts: { "go": "cmd1 & cmd2"} 

但是npm执行cmd.exe下的脚本,该脚本不知道;我可以将其更改为 脚本:{ "go": "bats/bat1.bat")其中bat1.bat是一个cmd bat文件,它使用windows样式调用或启动命令来并行运行命令。哪个有效但给我一个只适用于Windows的脚本

如果我能让npm在bash clone或cygwin下运行脚本,那将会简单得多 我试过了 config: { "shell": "bash"} 但仍然运行cmd.exe

有没有办法告诉npm使用特定的shell(而不是cmd.exe)运行脚本?

8 个答案:

答案 0 :(得分:73)

从npm 5.1开始

npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"  

(64位安装)

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

请注意,您需要git for windows installed

您可以通过运行以下来恢复它:

npm config delete script-shell

答案 1 :(得分:22)

这是一种方法:

  1. 在项目bin目录中创建一个脚本,例如my_script.sh。
  2. 在package.json文件中,添加一行以使用bash运行脚本。例如:

    "scripts": {
      "boogie": "bash bin/my_script.sh"
    }
    
  3. 现在您可以通过以下命令从npm运行bash脚本:

        npm run-script boogie
    

    不是很优雅,但它有效。

    如果您在Windows和Linux / Unix上进行开发,那么至少这种方法对两种环境都是可移植的。

答案 2 :(得分:13)

理想情况下,覆盖npm shell config参数应该可以,但是在Windows中npm(至少版本1.4.14)似乎忽略了设置并改为使用cmd.exe。

在bash或Git Bash shell中使用以下命令来查找shell设置:

$ npm config ls -l | grep shell

默认情况下,输出为:

shell = "C:\\WINDOWS\\system32\\cmd.exe"

但是,要覆盖默认的shell参数,可以将npmrc文件添加(或编辑)到\ Users \ yourusername \ AppData \ Roaming \ npm \ etc目录。只需添加以下行:

shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"

您使用的路径可以是bash.exe的任何有效路径。现在,如果运行上面的“npm config ls -l | grep shell”命令,您将看到以下输出,表明shell参数已被覆盖:

shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
; shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)

或许,有一天,npm的新版本会关注被覆盖的shell参数。

答案 3 :(得分:1)

为此目的使用专门创建的node_module。我建议使用npm-run-all,但others存在,例如parallelshell

Parallelshell示例如下所示,可以直接替换您的问题。

"scripts": {
    "parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\""
},

以下命令:

npm run parallelexample1

适用于Windows和unix(Linux / MacOS)。

有趣的是,npm-run-all不支持shell命令;因此我们需要将所有shell命令放在单独的脚本中,如下所示。

"scripts": {
   "parallelexample2": "npm-run-all echo*",
    "echo1": "echo 1",
    "echo2": "echo 2",
    "echo3": "echo 3"
},

以下命令:

npm run parallelexample2

适用于Windows和unix(Linux / MacOS)。

答案 4 :(得分:1)

只使用CMD的方式运行.bat

以.json
"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject",
    "app": "cd build & browser-sync start --server --files 'index.html'",
    "bat": "start start-browser.bat",
    "starts": "start http://localhost:7777/datas/ && start http://localhost:7777/Info/"
},
。蝙蝠
start http://localhost:7777/datas/ && start http://localhost:7777/Info/

答案 5 :(得分:1)

对于npm脚本,您也可以使用跨平台Powershell https://github.com/powershell/powershell#get-powershell

要为单个项目设置,请在项目根文件夹中运行它:

npm config set script-shell pwsh --userconfig ./.npmrc

要为所有节点项目进行全局设置:

npm config set script-shell pwsh [--global]

答案 6 :(得分:0)

就我而言,我只需要从Bash内部运行cmd。我运行"c:\Program Files\Git\bin\bash.exe",然后运行npm build打开bash。然后,在bash shell下,我能够成功调用npm startmake -j6

如果您正在使用Git,则可能已经有bash了。如果没有,您可以install

希望这可以节省某人的时间。

答案 7 :(得分:-1)

那些可能和我有同样问题的人: 我可以在Windows cmd上运行npm start,但不能在(git)bash上运行它。我收到以下错误:

  

该节点未被识别为内部或外部命令...

我在网上搜索了两天,同时主要看到了将nodejs路径添加到系统环境变量路径的想法。 最后解决了我的问题的是Qwerty在上面写的那行... 谢谢Qwerty :)