当前位置: 首页 > 知识库问答 >
问题:

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

杜建章
2023-03-14

我正在Windows上运行npm,希望使用

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

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

如果我能让npm在bash克隆或cygwin下运行脚本,那就简单多了。

我尝试了config:{“shell”:“bash”}但仍然运行cmd。exe

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

共有3个答案

丰胤运
2023-03-14

理想情况下,重写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参数。

白祺然
2023-03-14

这里有一种方法:

>

  • 创建脚本,例如my_脚本。sh,在您的项目bin目录中
  • 在你的包裹里。json文件,添加一行以使用bash运行脚本。例如:

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

    现在,您可以通过以下方式从npm运行bash脚本:

        npm run-script boogie
    

    不是很优雅,但很管用。

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

  • 陆臻
    2023-03-14

    自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。

    npm config delete script-shell
    
     类似资料:
    • 问题内容: 我正在草拟一组程序的体系结构,这些程序共享存储在数据库中的各种相互关联的对象。我希望其中一个程序充当服务,为这些对象的操作提供更高级别的接口,而其他程序则通过该服务访问对象。 我目前的目标是将Python和Django框架作为实现该服务的技术。我很确定自己知道如何守护Linux中的Python程序。但是,这是系统应支持Windows的可选规格。我几乎没有Windows编程经验,也没有W

    • 问题内容: 在我的我有这两个脚本: 每当我开始在Node.js中开发时,我必须 并行 运行这两个脚本。我想到的第一件事是添加第三个脚本,如下所示: …但这将等待完成再运行。 如何并行运行它们? 请记住,我需要查看以下命令。另外,如果您的解决方案涉及构建工具,则我宁愿使用,因为我已经在另一个项目中使用了它。 问题答案: 使用并发调用的包。 然后按以下步骤设置您的任务:

    • 在我的中有以下两个脚本: 每次在Node.js中开始开发时,我都必须并行运行这两个脚本。我首先想到的是添加第三个这样的脚本: ...但在运行之前,将等待完成。 我如何并行运行这些?请记住,我需要查看这些命令的。另外,如果您的解决方案涉及构建工具,我宁愿使用而不是,因为我已经在另一个项目中使用了它。

    • 我已经决定尝试使用npm脚本作为构建工具,到目前为止我很喜欢它。我想解决的一个问题是,当运行一个脚本来运行jshint时,当某些东西没有通过linting时,我会得到大量的“npm ERR!”行。我想抑制这些,因为linter的输出更有意义。 是否有一种全局设置的好方法,以及是否有一种为每次脚本运行设置它的方法?

    • 问题内容: 我有一个简单的脚本blah.py(使用Python 2): 如果我通过以下方式执行脚本: 它输出参数,但是如果我通过以下方式执行脚本: 发生错误: 因此参数不会传递给脚本。 PATH中的python.exe。路径中也包含blah.py的文件夹。 python.exe是执行* .py文件的默认程序。 问题是什么? 问题答案: 执行脚本而不在前面键入“ python”时,你需要了解有关Wi

    • 问题内容: 假设我有 我可以运行什么NPM命令以使所有这些脚本按顺序启动。当我使用前/后修复时,它们顺序启动,但是它们不等待父脚本完成才执行。我假设唯一的解决方案是:在async.series辅助函数中触发shell命令时,如何使Gulp任务依次触发??我知道可以使用Gulp做到这一点,但我现在想坚持使用NPM来探索其功能。谢谢你的帮助! 问题答案: 通过npm run调用这些脚本,并用双“&”号