我在Windows上运行npm,想在run-scripts中使用& style并行操作,但在cmd中并行运行有点混乱,我想写的package.json文件-
scripts: { "go": "cmd1 & cmd2"}
字符串
但是npm在;
下执行脚本,它不知道;
,我可以将其更改为脚本:{ "go": "bats/bat1.bat")
其中bat1.bat是一个cmd bat文件,它使用windows样式调用或start命令来并行运行命令。
如果我能让npm在bash clone或cygwin下运行脚本,那就简单多了。
我尝试了config: { "shell": "bash"}
,但仍然运行config: { "shell": "bash"}
。
有没有办法告诉npm使用特定的shell(而不是xml.exe)运行脚本?
7条答案
按热度按时间jgwigjjp1#
自npm 5.1起
字符串
或 (64位安装)
型
请注意,您需要有git for windows installed。
您可以通过运行以下命令恢复:
型
h6my8fg22#
这里有一种方法:
1.在项目bin目录中创建一个脚本,如my_script.sh。
1.在package.json文件中,添加一行代码来使用bash运行脚本。例如:
字符串
现在你可以通过以下方式从npm运行bash脚本:
型
不是很优雅,但它工作。
如果您同时在Windows和Linux/Unix上进行开发,那么至少这种方法在这两种环境下都是相当可移植的。
66bbxpm53#
理想情况下,覆盖npm shell配置参数应该可以工作,但npm(至少版本1.4.14)似乎在Windows中忽略了该设置,而是使用npm. exe。
在bash或Git Bash shell中使用以下命令来查找shell设置:
字符串
默认情况下,输出为:
型
但是,要覆盖默认的shell参数,您可以将npmrc文件添加(或编辑)到\Users\yourusername\AppData\Roaming\npm\etc目录。只需添加以下行:
型
您使用的路径可以是任何有效的路径到npm. exe。现在,如果您运行上面的“npm config ls -l| grep shell”命令,您将看到以下输出,表明shell参数已被覆盖:
型
也许有一天,新版本的npm会关注被覆盖的shell参数。
bmvo0sr54#
你也可以使用跨平台的powershell https://github.com/powershell/powershell#get-powershell来编写npm脚本。
要为单个项目设置,请从项目根文件夹运行此命令:
字符串
要为所有节点项目全局设置,请执行以下操作:
型
jqjz2hbq5#
只是用CMD的方式运行
.bat
!.json
.bat
k0pti3hp6#
为此,请使用专门创建的node_module。我建议使用npm-run-all,但others确实存在,例如parallelshell。
以下是针对您的问题的drop-in-replacement示例。
字符串
以下命令:
型
适用于Windows和Unix(Linux/MacOS)。
有趣的是,npm-run-all不支持shell命令;因此我们需要将所有shell命令放在单独的脚本中,如下所示。
型
以下命令:
型
适用于Windows和Unix(Linux/MacOS)。
dl5txlt97#
在我的例子中,我只需要在Bash内部运行
npm start
。我运行cmd
,然后通过运行"c:\Program Files\Git\bin\bash.exe"
打开bash。在bash shell下,我可以成功地调用npm build
和npm start
。如果你使用Git,你可能已经有bash了。如果没有,你可以install它。
希望这可以保存某人的时间。