我在Windows上运行npm并想使用&运行脚本中的样式并行操作 但是在cmd中并行运行有点乱 在我的package.json文件中,我想写 -
scripts: { "go": "cmd1 & cmd2"}
但是npm执行cmd.exe下的脚本,该脚本不知道;
我可以将其更改为
脚本:{ "go": "bats/bat1.bat")
其中bat1.bat是一个cmd bat文件,它使用windows样式调用或启动命令来并行运行命令。哪个有效但给我一个只适用于Windows的脚本
config: { "shell": "bash"}
但仍然运行cmd.exe
有没有办法告诉npm使用特定的shell(而不是cmd.exe)运行脚本?
答案 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)
这是一种方法:
在package.json文件中,添加一行以使用bash运行脚本。例如:
"scripts": {
"boogie": "bash bin/my_script.sh"
}
现在您可以通过以下命令从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)
.bat
!"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 start
和make -j6
。
如果您正在使用Git,则可能已经有bash了。如果没有,您可以install。
希望这可以节省某人的时间。
答案 7 :(得分:-1)
那些可能和我有同样问题的人:
我可以在Windows cmd上运行npm start
,但不能在(git)bash上运行它。我收到以下错误:
该节点未被识别为内部或外部命令...
我在网上搜索了两天,同时主要看到了将nodejs路径添加到系统环境变量路径的想法。 最后解决了我的问题的是Qwerty在上面写的那行... 谢谢Qwerty :)