当我得到以下错误:

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。改变配置解决了我的问题。

其他回答

如何研究刷出调用引起的错误:

使用NODE_DEBUG=child_process, Credits to @karl-richter。简单,快速,2019年10月 使用包装器来装饰child_process。刷,积分到@jiaji-zhou。简单,快速,2015年1月 漫长的过程,归功于@laconbass。复杂,时间成本,2014年12月

已知的常见原因

Environment issues The command executable does not exist within the system (dependency not being installed). see prominc's answer The command executable does not exist within a directory of those specified by PATH environment variable. The executable binary was compiled with uncompatible libraries. see danilo-ramirez answer Windows-only bugs/quirks '.cmd' extension / shell: true. see li-zheng answer Administrator permisions. see steve's answer Wrong spawn('command', ['--argument', 'list'], { cwd, env, ...opts }) usage Specified working directory (opts.cwd) does not exist · see leeroy-brun's answer Argument list within command String spawn('command --wrong --argument list') Env vars within command string spawn('ENV_VAR=WRONG command') Argument list Array specified as String spawn('cmd', '--argument list') Unset PATH env variable spawn('cmd', [], { env: { variable } } => spawn('cmd', [], { env: { ...process.env, variable } }


ENOENT有两种可能的起源: 您正在编写的代码 您依赖的代码 当源代码是你依赖的代码时,通常的原因是环境问题(或windows怪癖)


在我的情况下,删除节点,删除所有AppData/Roaming/npm和AppData/Roaming/npm-cache,并安装节点再次解决问题。

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

我发现一个案例不在这个列表中,但它值得添加:

在Alpine Linux上,如果可执行文件不兼容,Node将会出现ENOENT错误。

Alpine期望使用libc生成二进制文件。使用glibc编译的可执行文件(例如chrome作为chromium的一部分)作为系统调用的包装器,在spawn调用ENOENT时将失败。

我在windows 8上得到了同样的错误。问题是由于系统路径的环境变量丢失。将“C:\Windows\System32\”值添加到系统PATH变量中。