[Solved-5 Solutions] Error spawn enoent on node.js
Error Description:
We get the following error:
Solution 1:
The problem of this error is, there is really little information in the error message to tell you where the call site is, i.e. which executable/command is not found, especially when you have a large code base where there are a lot of spawn calls.
- The key idea is to wrap the original spawn call with a wrapper which prints the arguments send to the spawn call.
- Here is the wrapper function, put it at the top of the index.js or whatever your server's starting script.
Then the next time you run your application, before the uncaught exception's message you will see something like that:
Solution 2:
Ensure spawn is called the right way
First, review the docs for child_process.spawn( command, args, options ):
Solution 3:
Identify the Event Emitter that emits the error event
- Search on your source code for each call to spawn, or child_process.spawn
and attach there an event listener for the 'error' event, so you get noticed the exact Event Emitter that is throwing it as 'Unhandled'. After debugging, that handler can be removed.
Execute and you should get the file path and line number where your 'error' listener was registered. Something like:
Solution 4:
Ensure the environment variable $PATH is set
There are two possible scenarios:
- You rely on the default spawn behaviour, so child process environment will be the same as process.env.
- You are explicity passing an env object to spawn on the options argument.
In both scenarios, you must inspect the PATH key on the environment object that the spawned child process will use.
Example for scenario 1
Example for scenario 2
The absence of PATH (i.e., it's undefined) will cause spawn to emit the ENOENT error, as it will not be possible to locate any command unless it's an absolute path to the executable file.
Solution 5:
Ensure command exists on a directory of those defined in PATH
Spawn may emit the ENOENT error if the filename command (i.e, 'some-command') does not exist in at least one of the directories defined on PATH.
Locate the exact place of command. On most linux distributions, this can be done from a terminal with the which command. It will tell you the absolute path to the executable file (like above), or tell if it's not found.
Example usage of which and its output when a command is found
Example usage of which and its output when a command is not found
- miss-installed programs are the most common cause for a not found command. Refer to each command documentation if needed and install it.
- When command is a simple script file ensure it's accessible from a directory on the PATH. If it's not, either move it to one or make a link to it.
- Once you determine PATH is correctly set and command is accessible from it, you should be able to spawn your child process without spawn ENOENT being thrown.