【发布时间】:2013-07-05 04:52:25
【问题描述】:
我正在尝试让spawn 影响rm -rf node_modules,然后是npm install(在 Windows 7 上;nx 命令由透明安装的 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); });
但是,运行它会产生以下错误:
rm: unknown option -- ,
Try `rm --help' for more information.
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); });
但是,运行它会产生以下错误:
{
'0': {
[Error: spawn ENOENT]
code: 'ENOENT',
errno: 'ENOENT',
syscall: 'spawn'
}
}
如何让 spawn 运行使用 exec 运行良好的相同命令,而不会到处抛出错误?为什么这不起作用?阅读 API,http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options,似乎表明这正是人们应该如何使用 spawn...
【问题讨论】: