从句点开始在Windows上运行npm脚本

时间:2018-06-23 05:01:25

标签: windows npm devops

我有一个package.json文件,其中定义了以下脚本:

"scripts": { "test": "./node_modules/selenium-cucumber-js/index.js" }

当我在Linux或Mac上运行npm test时,此脚本将按预期运行。在Windows上,但是出现错误:

/node_modules/selenium-cucumber-js/index.js '.' is not recognized as an internal or external command, operable program or batch file. npm ERR! Test failed. See above for more details.

但是,如果我直接从cmd提示符下运行命令./node_modules/selenium-cucumber-js/index.js,它将正常运行。如果我尝试通过以“。”开头的npm运行任何其他脚本,也会发生相同的问题。我再也找不到其他讨论此问题的话题了。

我正在Windows 10 Home上运行npm版本5.6.0

有人知道我该如何工作吗?

3 个答案:

答案 0 :(得分:3)

scripts下定义的所有内容都将在默认系统终端和Windows ./node_modules/selenium-cucumber-js/index.js上执行,这绝对不是有效的命令(或路径)。碰巧的是,同一个文件具有一个+x参数和一个指向Node.js(或另一个JS解释器)二进制文件的shebang,以便它可以在Linux上执行而无需干预。

我敢肯定,如果您在默认的Windows终端(cmd.exe)中执行相同的命令,也会遇到相同的错误,但是您可能会在* nix的某些端口/仿真中忽略它终端(例如Cygwin,MSYS,bash.exe等),这可能会使您对npm链之外的一切正常工作有错误的认识。

如果您要确保脚本在使用相对路径并保持跨平台兼容性的同时被Node.js执行,请显式调用它:

"scripts": {
    "test": "node ./node_modules/selenium-cucumber-js/index.js"
}

这还将解决诸如在执行的脚本中没有正确的x标志或shebang之类的问题,并且由于Node.js非常适合在Windows上使用* nix路径,因此不会”也不要抱怨。

答案 1 :(得分:1)

从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

答案 2 :(得分:0)

无论何时编写shell脚本,都需要指定为其编写的shell。对于内联package.json脚本,应在.npmrc旁边的package.json中执行此操作,如下所示:

script-shell = bash

如果您未指定外壳,则npm可以自由选择任何旧外壳。在Windows上,它选择cmd.exe,这几乎是您想要的。

(注意:我不建议为此使用npm config set。它设置本地用户配置。正确的shell应该与脚本一起存储在版本控制中。)