Mik*_*ans 33 exec spawn node.js
我试图spawn实现一个rm -rf node_modules跟随npm install(在Windows 7; n x命令由透明安装的CygWin提供.所有n x命令在命令行上解析就好了).
我最初使用它exec,但想要捕获stdout/stderr信息,因此我想我会使用spawn,并重写代码使用它.然而,这打破了一切.
rm重写的命令变为:
var spawn = require("child_process").spawn,
child = spawn("rm", ["-rf", "node_modules"]);
child.stdout.on('data', function (data) { console.log(data.toString()); });
child.stderr.on('data', function (data) { console.log(data.toString()); });
child.on('error', function() { console.log(arguments); });
Run Code Online (Sandbox Code Playgroud)
但是,运行它会生成以下错误:
rm: unknown option -- ,
Try `rm --help' for more information.
Run Code Online (Sandbox Code Playgroud)
npm重写的命令变为:
var spawn = require("child_process").spawn,
child = spawn("npm", ["install"]);
child.stdout.on('data', function (data) { console.log(data.toString()); });
child.stderr.on('data', function (data) { console.log(data.toString()); });
child.on('error', function() { console.log(arguments); });
Run Code Online (Sandbox Code Playgroud)
但是,运行它会生成以下错误:
{
'0': {
[Error: spawn ENOENT]
code: 'ENOENT',
errno: 'ENOENT',
syscall: 'spawn'
}
}
Run Code Online (Sandbox Code Playgroud)
如何使spawn运行相同的命令,使用得很好exec而不会在整个地方抛出错误?为什么这不起作用?阅读API,http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options,似乎表明这正是人们应该如何使用spawn ...
Mik*_*ans 63
经过大量尝试不同的事情之后,我终于看了一下"npm"实际上是在windows上,结果是一个名为bash的脚本npm,以及一个名为windows的本地批处理脚本npm.cmd(不知道为什么它是.cmd ,那应该是.bat,但你有它).Windows的命令解析器会看到npm,注意它不是可执行文件,请参阅npm.cmd,然后注意到它是一个可执行文件,然后将使用它.当你在终端时,这是有用的,但spawn()不会做任何这样的解决方案:传递它将npm使它失败,因为它不是可执行文件.npm.cmd然而,将它作为命令传递可以正常工作.
(另外,不知道为什么rm早些时候失败了,因为这实际上是正常工作而没有我可以告诉的任何变化.可能误读了作为问题的一部分而事实上它不是.)
所以:如果您spawn在Windows中遇到ENOENT,当您尝试触发的命令在普通命令提示符下工作时,请确定您正在调用的命令是否是真正的可执行文件,或者是否有.bat/ .cmd该命令的文件提示将"帮助"为你运行.如果是这样,产生那个.
编辑
由于这篇文章仍然是upvotes,确保命令始终有效的一个好方法是基于它来引导它process.platform,这将是win32针对Windows的.
var npm = (process.platform === "win32" ? "npm.cmd" : "npm"),
child = spawn(npm, ["install", ...]);
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42759 次 |
| 最近记录: |