当我得到以下错误:

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)


当前回答

最近我也遇到了类似的问题。

Starting the development server...

events.js:174
      throw er; // Unhandled 'error' event
      ^

Error: spawn null ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
    at onErrorNT (internal/child_process.js:415:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)
Emitted 'error' event at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:246:12)
    at onErrorNT (internal/child_process.js:415:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)
error Command failed with exit code 1.

这是由于浏览器的.env文件中有一个错误的配置。我有BROWSER=null,但它必须是BROWSER=none。改变配置解决了我的问题。

其他回答

当我试图在Debian Linux系统上从VS Code编辑器中调试node.js程序时,我得到了这个错误。我注意到同样的事情在Windows上也可以正常工作。这里之前给出的解决方案没有多大帮助,因为我没有编写任何“衍生”命令。违规代码可能是由微软编写的,并隐藏在VS code程序的引擎盖下。

接下来,我注意到node.js在Windows上被称为node,但在Debian上(可能在基于Debian的系统上,如Ubuntu),它被称为nodejs。所以我创建了一个别名,从根终端运行

ln -s /usr/bin/nodejs /usr/local/bin/node

这就解决了问题。同样或类似的过程可能也适用于其他情况,即你的node.js被称为nodejs,但你运行的程序希望它被称为node,反之亦然。

在运行测试用例时,我也遇到了这个恼人的问题,所以我尝试了许多方法来解决它。但对我来说,有效的方法是在包含主文件的目录中运行你的测试运行器,其中包含你的nodejs衍生函数,如下所示:

nodeProcess = spawn('node',params, {cwd: '../../node/', detached: true });

例如,这个文件名是test.js,所以只需移动到包含它的文件夹。在我的例子中,它是这样的测试文件夹:

cd root/test/

然后从运行您的测试运行程序,在我的情况下,它是摩卡,所以它将是这样的:

mocha test.js

我浪费了一天多的时间来弄清楚。享受! !

在花费大量时间调试这个问题之前,大多数情况下可以通过删除node_modules并重新安装包来解决。

如何安装:

如果存在锁文件,您可以使用

yarn install --frozen-lockfile

or

npm ci

各自的。如果不是的话

yarn install

or

npm i

我在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']);

Windows解决方案:用节点交叉生成替换生成。例如,在你的app.js的开头:

(function() {
    var childProcess = require("child_process");
    childProcess.spawn = require('cross-spawn');
})();