【问题标题】:NPM script under cygwin/windows: the syntax of the command is incorrectcygwin/windows下的npm脚本:命令语法不正确
【发布时间】:2017-06-25 18:08:06
【问题描述】:

我在 Windows 7 机器上运行 Node 6.9.5 和 NPM 3.10.10。我的终端是 Cygwin 2.877。

如果我尝试在 Cygwin 中运行以下命令,它可以正常工作:

mkdir mydir/mysubdir;

但是,如果我将其放入 package.json 文件中,例如:

"scripts": {
 "test": "mkdir mydir/mysubdir"
},

然后运行:

npm run test

它失败了:

The syntax of the command is incorrect.

谷歌搜索后,这似乎是一个 Windows 命令提示符错误,而不是 Cygwin 错误。因此,NPM 似乎正在尝试使用命令提示符而不是现有的 Cygwin 环境来运行脚本。

我该如何解决这个问题?或者更确切地说,如何确保 NPM 在调用它的终端环境中运行脚本?

【问题讨论】:

  • 您使用的是 Win32 还是 Cygwin 版本的 NPM?一般来说,如果您打算与 Cygwin 工具或文件系统的 Cygwin 视图交互,则需要 cygwin 构建。
  • @cnettel 我正在使用 win32 构建。将查看使用 Cygwin 构建是否会改变任何内容。有没有办法强制 npm 使用给定的 shell 环境?
  • 原来没有:github.com/npm/npm/issues/6543。 Windows 上的环境总是cmd.exe。推荐的方法是编写节点脚本并运行它们,我可能会走这条路。
  • 就像一个注释一样,您有时可以通过在 (Windows) PATH 中添加 Cygwin 二进制文件来获得更好的 Cygwin 类行为。在我想使用 Win32 Python 或 Perl 的情况下,我也做了同样的事情,但我还需要一些 cygwin 工具。从 cmd 提示符启动的单个 Cygwin 二进制文件通常会表现得很好。主要问题是调用进程仍然不会有相同的文件系统视图。高级管道和环境变量的修改也不起作用,但只需调用特定的外部工具,就可以了。在这种情况下没有多大意义。

标签: node.js windows npm cygwin


【解决方案1】:

脚本始终在默认的 windows shell 中运行,而不是 cygwin。

如果您希望它在 bash 中运行,请将其放入 package.json:

"scripts": {
    "test": "bash test.sh"
},

并将其放入test.sh:

#!/bin/bash
mkdir mydir/mysubdir

或者,正如 csvan 在评论中指出的那样,您可以使用 Node 脚本而不是 shell 脚本:

"scripts": {
    "test": "node test.js"
},

这种方法对于跨平台兼容性更好。

另见:

【讨论】:

  • 我最终采用了这种方法,但使用 JS 脚本来确保跨平台兼容性,例如"test": "node test.js"。接受您的回答,因为总体方法是正确的。
  • @csvan 我发布了一个从您的问题中运行确切命令的解决方案,但是是的,使用 JS 脚本对于跨平台兼容性甚至更好。我会把它添加到答案中。
  • The script are always run in the default windows shell, not cygwin -- 这需要大约一百多票...
  • @IgorSoloydenko 谢谢,我会强调这部分答案。
  • @rsp The script are always run in the default windows shell, not cygwin — 我猜它并不总是这样...script-shell npm 设置可以覆盖它,就像这样:npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" 从而在 Windows 上的 package.json 脚本中启用 bash 命令
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 2013-07-11
  • 2013-06-18
  • 1970-01-01
  • 2023-01-17
相关资源
最近更新 更多