続いて(Windows 7では、透過的にインストールされspawn
たCygWinのおかげでn xコマンド。すべてのn xコマンドはコマンドラインでうまく解決されます)。rm -rf node_modules
npm install
最初は を使用してい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'
}
}
exec
あちこちでエラーをスローすることなく、正常に機能した同じコマンドをspawnに実行させるにはどうすればよいですか? そして、なぜこれが機能しないのですか?API http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_optionsを読むと、これがまさにスポーンの使用方法であることが示唆されているようです...