我正在尝试spawn
执行rm -rf node_modules
后续操作npm install
(在 Windows 7 上;n x 命令由透明安装的 CygWin 提供。所有n x 命令都可以在命令行上解析)。
我最初有这个 using 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...