次のエラーが表示された場合:
events.js:72
throw er; // Unhandled 'error' event
^
Error: spawn ENOENT
at errnoException (child_process.js:1000:11)
at Process.ChildProcess._handle.onexit (child_process.js:791:34)
これを修正するにはどのような手順を実行すればよいでしょうか?
著者注: このエラーに関する多くの問題が、将来の参考のためにこの質問を投稿するきっかけとなりました。
関連する質問:
- NODE_ENV=production で spawn 関数を使用する
- node.js child_process.spawn ENOENT エラー - supervisord の場合のみ
- ENOENT node.js エラーが発生する
- https://stackoverflow.com/questions/27603713/nodejs-spawn-enoent-error-on-travis-calling-global-npm-package
- Node JS - Grunt タスクの child_process spawn('npm install') で ENOENT エラーが発生する
- 「フォアマン」タスクの実行中に致命的なエラーが発生しました: ENOENT が生成されました
- Node.js で未処理のエラー イベントが発生しました。エラー: errnoException で ENOENT が生成されました (child_process.js:975:11)
- Node.js SpookyJS: hello.js の実行中にエラーが発生しました
- https://stackoverflow.com/questions/26572214/run-grunt-on-a-directory-nodewebkit
- 子プロセスNodeJSでexeファイルを実行する
- ノード: child_process.spawn はパス内にあるにもかかわらず Java では動作しません (ENOENT)
- NodeJS で ENOENT エラーが発生する(PYTHON関連)
- node.js (partial.js) で画像のサイズ変更が機能しない(インストールされていない依存関係)
- npm インストール エラー ENOENT(ビルド依存関係の問題)
- Windows 7 に node.js - oracle モジュールをインストールできない(ビルド依存関係の問題)
- Windows で Node.js を使用して gulp をインストールするときにエラーが発生しました(奇妙なケース)
ベストアンサー1
注意: このエラーは、ほとんどの場合、コマンドが存在しない、作業ディレクトリが存在しない、または Windows のみのバグが原因で発生します。
私は、次の根本的な原因を理解するための特に簡単な方法を見つけました。
Error: spawn ENOENT
このエラーの問題は、呼び出しサイトがどこにあるか、つまりどの実行可能ファイル/コマンドが見つからないかを伝える情報がエラーメッセージにほとんどないことです。特に、多くのspawn呼び出しがある大規模なコードベースがある場合に顕著です。一方、エラーの原因となる正確なコマンドがわかっている場合は、次の操作を実行できます。@laconbass の回答問題を解決するために。
@laconbass の回答で提案されているように、コード内のあらゆる場所にイベント リスナーを追加するのではなく、どのコマンドが問題を引き起こしているかを特定する非常に簡単な方法を見つけました。重要なアイデアは、元の spawn 呼び出しを、spawn 呼び出しに送信された引数を出力するラッパーでラップすることです。
ここにラッパー関数があります。これをindex.js
サーバーの起動スクリプトの先頭に配置します。
(function() {
var childProcess = require("child_process");
var oldSpawn = childProcess.spawn;
function mySpawn() {
console.log('spawn called');
console.log(arguments);
var result = oldSpawn.apply(this, arguments);
return result;
}
childProcess.spawn = mySpawn;
})();
次にアプリケーションを実行すると、キャッチされていない例外のメッセージの前に次のような内容が表示されます。
spawn called
{ '0': 'hg',
'1': [],
'2':
{ cwd: '/* omitted */',
env: { IP: '0.0.0.0' },
args: [] } }
この方法では、実際に実行されたコマンドを簡単に知ることができ、nodejs が実行可能ファイルを見つけられない理由を見つけて問題を修正できます。