当我得到以下错误:
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)
我该采取什么程序来修理呢?
作者注:这个错误的许多问题鼓励我发布这个问题,以供将来参考。
相关问题:
using spawn function with NODE_ENV=production
node.js child_process.spawn ENOENT error - only under supervisord
spawn ENOENT node.js error
https://stackoverflow.com/questions/27603713/nodejs-spawn-enoent-error-on-travis-calling-global-npm-package
Node JS - child_process spawn('npm install') in Grunt task results in ENOENT error
Running "foreman" task Fatal error: spawn ENOENT
unhandled error event in node js Error: spawn ENOENT at errnoException (child_process.js:975:11)
Node.js SpookyJS: error executing hello.js
https://stackoverflow.com/questions/26572214/run-grunt-on-a-directory-nodewebkit
Run exe file with Child Process NodeJS
Node: child_process.spawn not working on Java even though it's in the path (ENOENT)
spawn ENOENT error with NodeJS (PYTHON related)
image resizing is not working in node.js (partial.js) (non-installed dependency)
npm install error ENOENT (build dependency problem)
Cannot install node.js - oracle module on Windows 7 (build dependency problem)
Error installing gulp using nodejs on windows (strange case)
@laconbass的回答帮助了我,可能是最正确的。
我来这里是因为我错误地使用了spawn。
举个简单的例子:
这是不正确的:
const s = cp.spawn('npm install -D suman', [], {
cwd: root
});
这是不正确的:
const s = cp.spawn('npm', ['install -D suman'], {
cwd: root
});
这是正确的:
const s = cp.spawn('npm', ['install','-D','suman'], {
cwd: root
});
但是,我建议这样做:
const s = cp.spawn('bash');
s.stdin.end(`cd "${root}" && npm install -D suman`);
s.once('exit', code => {
// exit
});
这是因为cp.on('exit', fn)事件总是会触发,只要安装了bash,否则,cp.on('error', fn)事件可能会先触发,如果我们以第一种方式使用它,如果我们直接启动'npm'。
我在Windows上遇到了这个问题,用完全相同的命令(省略参数)调用exec和spawn对于exec来说工作得很好(所以我知道我的命令在$PATH上),但spawn会给出ENOENT。原来我只需要将.exe附加到我正在使用的命令:
import { exec, spawn } from 'child_process';
// This works fine
exec('p4 changes -s submitted');
// This gives the ENOENT error
spawn('p4');
// But this resolves it
spawn('p4.exe');
// Even works with the arguments now
spawn('p4.exe', ['changes', '-s', 'submitted']);
在运行测试用例时,我也遇到了这个恼人的问题,所以我尝试了许多方法来解决它。但对我来说,有效的方法是在包含主文件的目录中运行你的测试运行器,其中包含你的nodejs衍生函数,如下所示:
nodeProcess = spawn('node',params, {cwd: '../../node/', detached: true });
例如,这个文件名是test.js,所以只需移动到包含它的文件夹。在我的例子中,它是这样的测试文件夹:
cd root/test/
然后从运行您的测试运行程序,在我的情况下,它是摩卡,所以它将是这样的:
mocha test.js
我浪费了一天多的时间来弄清楚。享受! !
对于Windows上的ENOENT, https://github.com/nodejs/node-v0.x-archive/issues/2318#issuecomment-249355505修复它。
如更换产卵(npm, [' v '], {stdio:“继承”}):
对于所有node.js版本:
产卵(/ ^赢/ test (process.platform) ?npm。Cmd ': 'npm', ['-v'], {stdio: 'inherit'})
对于node.js 5。X及以后:
产卵(npm, [' v '], {stdio:“继承”,外壳:真})