How do I debug "Error: spawn ENOENT" on node.js?

child-process, debugging, error-handling, node.js, spawn

Solution

How to research the spawn call raising the error:

- Use NODE_DEBUG=child_process, Credits to @karl-richter. Simple, quick, October 2019

- Use a wrapper to decorate `child_process.spawn`, Credits to @jiaji-zhou. Simple, quick, January 2015

- Long procedure, credits to @laconbass. Complex, time-cost, December 2014

Known, usual causes

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 } }`

There are 2 posible origins for `ENOENT`:

- Code you are writing

- Code you depend on

When origin is code you depend on, usual cause is an Environment Issue (or windows quirk)

Problem

When I get the following error: ``` 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) ``` What procedure can I follow to fix it? Author note: Lots of issues with this error encouraged me to post this question for future references. Related questions: - 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)

Original source

Related problems