在以句点开头的 Windows 上运行 npm 脚本

Sco*_*tty 3 windows npm devops

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

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

当我npm test在 linux 或 mac 上运行时,此脚本按预期运行。但是在 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.

但是,如果我./node_modules/selenium-cucumber-js/index.js直接从 cmd 提示符运行该命令,它可以正常工作。如果我尝试通过以“.”开头的 npm 运行任何其他脚本,也会出现同样的问题。我找不到任何其他线程将此作为一个问题进行讨论。

5.6.0在 Windows 10 Home 上运行 npm 版本。

有谁知道我怎么能让这个工作?

小智 9

从 npm 5.1 开始

npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"  
Run Code Online (Sandbox Code Playgroud)

或(64位安装)

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
Run Code Online (Sandbox Code Playgroud)

请注意,您需要安装 git for windows

您可以通过运行来恢复它: npm config delete script-shell


zwe*_*wer 6

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

我很确定如果您要在默认的 Windows shell ( cmd.exe) 中执行相同的命令,您会得到相同的错误,但您可能会在 *nix shell(即 Cygwin、MSYS、bash)的某些端口/仿真中摆脱它.exe 等),这可能会给您一种错误的感觉,认为npm链外的一切都可以正常工作。

如果您想确保Node.js在使用相对路径并保持跨平台兼容性时执行脚本,请将其显式调用为:

"scripts": {
    "test": "node ./node_modules/selenium-cucumber-js/index.js"
}
Run Code Online (Sandbox Code Playgroud)

这也将处理诸如x在您正在执行的脚本中没有合适的标志或shebang 之类的事情,因为Node.js在 Windows 上使用 *nix 路径非常舒服,所以它也不会抱怨。