如何在 Windows 中为 npm 运行脚本设置 shell

我在 Windows 上运行 npm,希望在 run-script 中使用 & style 并行操作 但是在 cmd 中并行运行有点麻烦 在我的 package.json 文件中,我想写-

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

但是 npm 执行 cmd.exe 下的脚本,它不知道 ;,我可以将其更改为 Script: { "go": "bats/bat1.bat"),其中 bat1.bat 是一个 cmd bat 文件,使用 windows 样式调用或 start 命令并行运行命令。它能工作,但是给了我一个只能在 Windows 上工作的脚本。

如果我可以让 npm 在 bash 克隆或 cygwin 下运行脚本,那将会简单得多。

我尽力了 config: { "shell": "bash"} 但还是能运行 cmd.exe

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

92336 次浏览

这里有一个方法:

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

    "scripts": {
    "boogie": "bash bin/my_script.sh"
    }
    

Now you can run your bash script from npm by:

    npm run-script boogie

不是很优雅,但很有效。

如果您同时在 Windows 和 Linux/Unix 中开发,那么至少这种方法对于这两种环境都是相当可移植的。

理想情况下,重写 npm shell 配置参数应该可以工作,但是在 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 参数。

为此使用专门创建的 node _ module。

下面是一个并行 shell 示例,用于替换您的问题。

"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)上运行。

只是用 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/

从 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

你可以通过运行:

npm config delete script-shell

在我的情况下,我只需要从 Bash 内部运行 npm start。我运行 cmd,然后通过运行 "c:\Program Files\Git\bin\bash.exe"打开 bash。在 bash shell 下,我能够成功地调用 npm buildnpm start

如果您正在使用 Git,您可能已经有 bash 了。如果没有,您可以 安装它。

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

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

若要为单个项目设置,请从项目根文件夹运行此命令:

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

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

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