我在 Windows 上运行 npm 并希望在运行脚本中使用 & 样式并行操作,但在 cmd 中并行运行在我想写的 package.json 文件中有点混乱 -
scripts: { "go": "cmd1 & cmd2"}
但是 npm 在不知道 ;
的 cmd.exe 下执行脚本我可以将其更改为脚本:{ "go": "bats/bat1.bat")
其中 bat1.bat 是一个 cmd bat 文件,它使用 windows 样式调用或启动命令来并行运行命令.这有效,但给了我一个仅适用于 Windows 的脚本。
如果我能让 npm 在 bash 克隆或 cygwin 下运行脚本会简单得多。
我试过 config: { "shell": "bash"}
但仍然运行 cmd.exe
有没有办法告诉 npm 使用特定的 shell(不是 cmd.exe)运行脚本?
从 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
这是一种方法:
在您的项目 bin 目录中创建一个脚本,例如 my_script.sh。在您的 package.json 文件中,添加一行以使用 bash 运行脚本。例如:“脚本”:{“boogie”:“bash bin/my_script.sh”}
现在您可以通过以下方式从 npm 运行 bash 脚本:
npm run-script boogie
不是很优雅,但它有效。
如果您同时在 Windows 和 Linux/Unix 中进行开发,那么至少这种方法对于这两种环境都是相当可移植的。
"scripts": { "start": "node ./bin/www", "bash": "bash -c", "ls": "npm run bash ls" }
理想情况下,覆盖 npm shell 配置参数应该可以工作,但 npm(至少版本 1.4.14)在 Windows 中似乎会忽略该设置并改用 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 参数。
$ npm config set shell "C:\\msys64\\usr\\bin\\bash"
;
分隔的更多命令的脚本 在 Windows 上,在文件夹 C:\Users\username\ 我添加了一个包含 shell = "C:\\Program Files\\Git\\bin\\bash.exe" script-shell = "C:\\Program Files\\Git\\bin\\bash.exe"
的 .npmrc
文件
您还可以将跨平台的 powershell https://github.com/powershell/powershell#get-powershell 用于 npm 脚本。
要为单个项目设置,请从项目根文件夹运行:
npm config set script-shell pwsh --userconfig ./.npmrc
为所有节点项目全局设置:
npm config set script-shell pwsh [--global]
为此目的使用专门创建的 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)。
--parallel
选项
只是使用CMD的方式运行.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/
就我而言,我只需要从 Bash 内部运行 npm start
。我运行 cmd
,然后通过运行 "c:\Program Files\Git\bin\bash.exe"
打开 bash。在 bash shell 下,我能够成功调用 npm build
和 npm start
。
如果您正在使用 Git,您可能已经拥有 bash。如果没有,您可以install它。
希望这可以节省某人的时间。
PORT=8000
npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"
是我在 Windows 10 64 位上运行并行脚本的所有问题的答案。 @DuncanSungWKim 감사합니다 为此。npm run <script
,则会生成一个运行脚本的新 git bash 窗口。这不是我想要的。有没有办法在调用外壳中简单地调用外壳?npm config set script-shell bash
,因为 bash.exe 位置可能在PATH