524

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:

Community
  • 1
  • 1
laconbass
  • 17,080
  • 8
  • 46
  • 54
  • 15
    In my case, I was passing in the whole command as a String like you would with `exec` instead of passing in the command as the first argument and the options as an Array for the second argument. e.g. I was doing `spawn( "adb logcat -c" )` instead of `spawn( "adb", [ "logcat", "-c" ] )`. – Joshua Pinter Apr 02 '20 at 15:49
  • This worked for me: https://stackoverflow.com/a/65008091/8119511 – Ank_247shbm Mar 03 '22 at 19:21
  • In VS Code, uninstalled below linter extension, then it worked: marketplace.visualstudio.com/items?itemName=fnando.linter . See https://github.com/yarnpkg/yarn/issues/5275#issuecomment-1250079916 – Manohar Reddy Poreddy Sep 17 '22 at 14:19
  • Again, a _missing dependency within environment_ cause – laconbass Sep 18 '22 at 02:31

32 Answers32

302

NOTE: This error is almost always caused because the command does not exist, because the working directory does not exist, or from a windows-only bug.

I found a particular easy way to get the idea of the root cause of:

Error: spawn ENOENT

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. On the other hand, if we know the exact command that cause the error then we can follow @laconbass' answer to fix the problem.

I found a very easy way to spot which command cause the problem rather than adding event listeners everywhere in your code as suggested in @laconbass' answer. 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.

(function() {
    var childProcess = require("child_process");
    var oldSpawn = childProcess.spawn;
    function mySpawn() {
        console.log('spawn called');
        console.log(arguments);
        var result = oldSpawn.apply(this, arguments);
        return result;
    }
    childProcess.spawn = mySpawn;
})();

Then the next time you run your application, before the uncaught exception's message you will see something like that:

spawn called
{ '0': 'hg',
  '1': [],
  '2':
   { cwd: '/* omitted */',
     env: { IP: '0.0.0.0' },
     args: [] } }

In this way you can easily know which command actually is executed and then you can find out why nodejs cannot find the executable to fix the problem.

fuzzyTew
  • 3,511
  • 29
  • 24
Jiaji Zhou
  • 3,037
  • 2
  • 10
  • 2
158

Step 1: Ensure spawn is called the right way

First, review the docs for child_process.spawn( command, args, options ):

Launches a new process with the given command, with command line arguments in args. If omitted, args defaults to an empty Array.

The third argument is used to specify additional options, which defaults to:

{ cwd: undefined, env: process.env }

Use env to specify environment variables that will be visible to the new process, the default is process.env.

Ensure you are not putting any command line arguments in command and the whole spawn call is valid. Proceed to next step.

Step 2: Identify the Event Emitter that emits the error event

Search on your source code for each call to spawn, or child_process.spawn, i.e.

spawn('some-command', [ '--help' ]);

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.

spawn('some-command', [ '--help' ])
  .on('error', function( err ){ throw err })
;

Execute and you should get the file path and line number where your 'error' listener was registered. Something like:

/file/that/registers/the/error/listener.js:29
      throw err;
            ^
Error: spawn ENOENT
    at errnoException (child_process.js:1000:11)
    at Process.ChildProcess._handle.onexit (child_process.js:791:34)

If the first two lines are still

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

do this step again until they are not. You must identify the listener that emits the error before going on next step.

Step 3: Ensure the environment variable $PATH is set

There are two possible scenarios:

  1. You rely on the default spawn behaviour, so child process environment will be the same as process.env.
  2. 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

// inspect the PATH key on process.env
console.log( process.env.PATH );
spawn('some-command', ['--help']);

Example for scenario 2

var env = getEnvKeyValuePairsSomeHow();
// inspect the PATH key on the env object
console.log( env.PATH );
spawn('some-command', ['--help'], { env: env });

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.

When PATH is correctly set, proceed to next step. It should be a directory, or a list of directories. Last case is the usual.

Step 4: 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

> which some-command
some-command is /usr/bin/some-command

Example usage of which and its output when a command is not found

> which some-command
bash: type: some-command: 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.

Marcel Bro
  • 4,907
  • 4
  • 43
  • 70
laconbass
  • 17,080
  • 8
  • 46
  • 54
  • The problem for me was indeed that `PATH` was undefined. Do you know what causes this? I asked a question about it as well http://stackoverflow.com/questions/29652582/process-env-path-undefined-in-passenger-node-app-production-mode – fredrikekelund Apr 16 '15 at 05:52
  • I remember a time it was `undefined` because the way I was spawning the node proccess. – laconbass Apr 17 '15 at 16:02
  • 1
    This has been very helpful to my debugging of Spawn ENOENT. I've referenced it multiple times. Thanks! – CodeManiak Jul 09 '15 at 22:13
  • if it's an ENOENT error, why would the command not be recognized on the OS? it seems reasonable that the command is recognized but something is wrong with reading the file itself... – Alexander Mills Aug 26 '15 at 19:28
  • @AlexMills Usually the situation you describe is reported as EACCES – laconbass Sep 13 '15 at 15:37
  • 48
    I've also found that ENOENT will be thrown if you specify `cwd` in the options, but the given directory does not exist. – Daniel Imfeld Nov 19 '15 at 22:37
  • 4
    @DanielImfeld TOTAL SAVIOUR. You should write an answer that says this. – GreenAsJade Nov 29 '15 at 08:37
  • I have a linux box and an osx box, both node versions reporting using v4.2.4. On the OSX machine if a try/catch wrap a call to spawn('bogus-binary', ...), it lands in the catch statement. in the linux box, it shows up in the event emitter. this is wild. – cdaringe Feb 19 '16 at 06:27
  • @cdaringe please post a new question with the code and let's see what the problem may be – laconbass Feb 20 '16 at 05:49
  • 4
    When you are using `spawn('some-command', ['--help'], { env: env });` as exemplified by Step 3 in this answer and are passing a custom environment, be sure to specify the `PATH`, for instance: `{ env: { PATH: process.env.PATH } }`. The env option will not inherit variables from your current env by default. – anty Aug 11 '16 at 11:52
  • I was running the command as root/ with sudo so the `PATH` environment variable was not the same. Step 3 was the step that pointed this out to me. Thanks! – Tom Aug 05 '18 at 05:40
  • 14
    I was able to solve my issue by passing `shell: true` to the spawn options. – Nickofthyme Jan 24 '19 at 23:20
  • 1
    Also, if your Node process is running inside a container like Docker, make sure the command you're trying to run has been added to the Dockerfile – Matt Molnar Mar 21 '19 at 15:43
  • Another issue is that `shell` MUST be a simple file path with no arguments. To setup a shell like Docker or similar where args need to be passed it must be wrapped in a proxy bash script. – MrYellow Jun 30 '20 at 00:50
  • 1
    @MrYellow see https://stackoverflow.com/a/62551786/1894803 – laconbass Jul 03 '20 at 16:14
  • @laconbass Yeah that overloading of `spawn` works, although the call in my case was buried within a module, made sense to use a bash script (which cleanly accepted `-c command` only) to call the actual shell with arguments (`innershell --foo $1 "$2"`) rather than monkey patching it deeply within the JS. – MrYellow Jul 05 '20 at 01:55
  • 1
    @MrYellow NODE_DEBUG=child_process may also help avoiding the monkey-patching solution => https://stackoverflow.com/a/58474965/1894803 – laconbass Jul 06 '20 at 21:41
  • `miss-installed programs` or non-interoperable installations (even when both may follow the documentation). Example: I installed python via `amazon-linux-extras` on `Amazon Linux 2` but it installed to the entity `python3.8` where `PythonShell` library for `Node` expected to invoke `python3`. I aliased the first to the second and continued failure. Now, change the installation to directly `yum install python3` and remove the alias - no issue anymore. – John Vandivier Jun 25 '21 at 20:32
  • you did beat ChatGPT.. it couldn't help, thought I didn't have command. Apparently I was calling spawn incorrectly. Thanks! – aprok Feb 09 '23 at 04:14
  • Humans instruct machines. Remember that ;) – laconbass Feb 10 '23 at 11:44
  • @DanielImfeld I was running a script where a child process spawn was changing the git branch and then tried to pull from the new branch. Since the script didn't exist in the new branch, I was getting this error (only on Debian, it was working on Macos). Your comment saved me a lot of headache. Thank you! – Ramtin Soltani Apr 10 '23 at 03:47
  • Another gotcha : `spawn` does not respect your bash settings. I had aliased a common build command, and node did not know about the alias. If you're seeing ENOENT, ensure your command is not an alias. – nameofname Jul 18 '23 at 21:12
93

simply adding shell: true option solved my problem:

following code is buggy on windows:

const { spawn } = require('child_process');
const child = spawn('dir');

workaround:

const { spawn } = require('child_process');
const child = spawn('dir', [], {shell: true});

based on Node.js Documentation (thanks to @Boris comment):

Note that:

if the shell option is enabled, do not pass unsanitized user input to this function. Any input containing shell metacharacters may be used to trigger arbitrary command execution.

laconbass
  • 17,080
  • 8
  • 46
  • 54
45

As @DanielImfeld pointed it, ENOENT will be thrown if you specify "cwd" in the options, but the given directory does not exist.

Community
  • 1
  • 1
Leeroy Brun
  • 4,468
  • 2
  • 16
  • 12
33

Windows solution: Replace spawn with node-cross-spawn. For instance like this at the beginning of your app.js:

(function() {
    var childProcess = require("child_process");
    childProcess.spawn = require('cross-spawn');
})(); 
Nilzor
  • 18,082
  • 22
  • 100
  • 167
  • 3
    worked except it is a drop-in, no need for child_process. Exactly the same way as node's spawn or spawnSync, so it's a drop in replacement. `var spawn = require('cross-spawn');` `// Spawn NPM asynchronously var child = spawn('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });` – Bogdan T Stancu Aug 19 '16 at 12:47
32

For ENOENT on Windows, https://github.com/nodejs/node-v0.x-archive/issues/2318#issuecomment-249355505 fix it.

e.g. replace spawn('npm', ['-v'], {stdio: 'inherit'}) with:

  • for all node.js version:

    spawn(/^win/.test(process.platform) ? 'npm.cmd' : 'npm', ['-v'], {stdio: 'inherit'})
    
  • for node.js 5.x and later:

    spawn('npm', ['-v'], {stdio: 'inherit', shell: true})
    
Li Zheng
  • 685
  • 7
  • 11
31

@laconbass's answer helped me and is probably most correct.

I came here because I was using spawn incorrectly. As a simple example:

this is incorrect:

const s = cp.spawn('npm install -D suman', [], {
    cwd: root
});

this is incorrect:

const s = cp.spawn('npm', ['install -D suman'], {
    cwd: root
});

this is correct:

const s = cp.spawn('npm', ['install','-D','suman'], {
    cwd: root
});

however, I recommend doing it this way:

const s = cp.spawn('bash');
s.stdin.end(`cd "${root}" && npm install -D suman`);
s.once('exit', code => {
   // exit
});

this is because then the cp.on('exit', fn) event will always fire, as long as bash is installed, otherwise, the cp.on('error', fn) event might fire first, if we use it the first way, if we launch 'npm' directly.

Alexander Mills
  • 90,741
  • 139
  • 482
  • 817
  • 1
    Thinking on refactoring my answer to provide a "general guide", and leaving details to each cause of the problem (miss dependencies, incorrect calls, wrong environment,...). – laconbass Apr 20 '16 at 23:57
  • 2
    everyone who likes this answer, may also be interested in this native alternative: https://gist.github.com/ORESoftware/7bf225f0045b4649de6848f1ea5def4c – Alexander Mills Nov 21 '17 at 04:10
  • 3
    Downvoted because if what you want to have is a shell then you should use `child_process.exec` or pass `shell: true` to `spawn`. – givanse Feb 28 '19 at 22:49
  • 1
    @givanse not necessarily true - you may want to run zsh or bash or fsh depending on what shell you want to use, and the behavior is also different – Alexander Mills Feb 28 '19 at 22:53
24

How to research the spawn call raising the error:

Known, usual causes

  1. 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
  2. Windows-only bugs/quirks

  3. 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:

  1. Code you are writing
  2. Code you depend on

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


laconbass
  • 17,080
  • 8
  • 46
  • 54
  • 1
    I was executing execa with "ab" command, but "Apache Bench" was not installed in the container... So, the first "Environment Issues" case... – Marcello DeSales Sep 29 '20 at 04:46
22

For anyone who might stumble upon this, if all the other answers do not help and you are on Windows, know that there is currently a big issue with spawn on Windows and the PATHEXT environment variable that can cause certain calls to spawn to not work depending on how the target command is installed.

Alex Turpin
  • 46,743
  • 23
  • 113
  • 145
11

In my case, I was getting this error thrown due to the necessary dependent system resources not being installed.

More specifically, I have a NodeJS app that is utilizing ImageMagick. Despite having the npm package installed, the core Linux ImageMagick was not installed. I did an apt-get to install ImageMagick and after that all worked great!

PromInc
  • 1,174
  • 7
  • 12
11

Before anyone spends to much time debugging this problem, most of the time it can be resolved by deleting node_modules and reinstalling the packages.

To Install:

If a lockfile exists you might use

yarn install --frozen-lockfile

or

npm ci

respectivly. if not then

yarn install

or

npm i
Community
  • 1
  • 1
InsOp
  • 2,425
  • 3
  • 27
  • 42
  • Wow such a simple solution and it worked for me! Everyone should try this first to see if it solves the issue. – korum Apr 01 '20 at 15:32
6

Are you changing the env option?

Then look at this answer.


I was trying to spawn a node process and TIL that you should spread the existing environment variables when you spawn else you'll loose the PATH environment variable and possibly other important ones.

This was the fix for me:

const nodeProcess = spawn('node', ['--help'], {
  env: {
    // by default, spawn uses `process.env` for the value of `env`
    // you can _add_ to this behavior, by spreading `process.env`
    ...process.env,
    OTHER_ENV_VARIABLE: 'test',
  }
});
Rico Kahler
  • 17,616
  • 11
  • 59
  • 85
5

In case you're experiencing this issue with an application whose source you cannot modify consider invoking it with the environment variable NODE_DEBUG set to child_process, e.g. NODE_DEBUG=child_process yarn test. This will provide you with information which command lines have been invoked in which directory and usually the last detail is the reason for the failure.

Kalle Richter
  • 8,008
  • 26
  • 77
  • 177
2

I ran into the same problem, but I found a simple way to fix it. It appears to be spawn() errors if the program has been added to the PATH by the user (e.g. normal system commands work).

To fix this, you can use the which module (npm install --save which):

// Require which and child_process
const which = require('which');
const spawn = require('child_process').spawn;
// Find npm in PATH
const npm = which.sync('npm');
// Execute
const noErrorSpawn = spawn(npm, ['install']);
Gum Joe
  • 45
  • 1
  • 9
2

Use require('child_process').exec instead of spawn for a more specific error message!

for example:

var exec = require('child_process').exec;
var commandStr = 'java -jar something.jar';

exec(commandStr, function(error, stdout, stderr) {
  if(error || stderr) console.log(error || stderr);
  else console.log(stdout);
});
Zack
  • 1,615
  • 18
  • 26
2

A case that I found that is not in this list but it's worthy to be added:

On Alpine Linux, Node will error with ENOENT if the executable is not compatible.

Alpine expects binaries with libc. An executable (e.g. chrome as part of chromium) that has been compiled with glibc as a wrapper for system calls, will fail with ENOENT when called by spawn.

Danilo Ramirez
  • 1,598
  • 1
  • 16
  • 22
  • yes this is the issue. In order to fix this follow this https://github.com/facebook/flow/issues/3649#issuecomment-447115855 – Junaid Atique Sep 16 '22 at 11:20
1

Ensure module to be executed is installed or full path to command if it's not a node module

Dalton
  • 435
  • 6
  • 12
1

I was also going through this annoying problem while running my test cases, so I tried many ways to get across it. But the way works for me is to run your test runner from the directory which contains your main file which includes your nodejs spawn function something like this:

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

For example, this file name is test.js, so just move to the folder which contains it. In my case, it is test folder like this:

cd root/test/

then from run your test runner in my case its mocha so it will be like this:

mocha test.js

I have wasted my more than one day to figure it out. Enjoy!!

Rajkumar Bansal
  • 323
  • 2
  • 10
1

solution in my case

var spawn = require('child_process').spawn;

const isWindows = /^win/.test(process.platform); 

spawn(isWindows ? 'twitter-proxy.cmd' : 'twitter-proxy');
spawn(isWindows ? 'http-server.cmd' : 'http-server');
Dan Alboteanu
  • 9,404
  • 1
  • 52
  • 40
  • 1
    While this may be a solution for win specific fixes, I don't see how it helps to debug the real cause of the ENOENT – laconbass Jan 30 '19 at 12:51
  • 1
    I have no idea why, but the spawn call would work in the node repl without the `.cmd`, but fail in a typescript jest test. -- This error can be quite hard to figure out, this answers deserves more upvotes. – Mathieu CAROFF May 29 '19 at 09:14
  • The `.cmd` extension thing is already covered by existing answers – laconbass Oct 08 '20 at 08:41
1

I ran into this problem on Windows, where calling exec and spawn with the exact same command (omitting arguments) worked fine for exec (so I knew my command was on $PATH), but spawn would give ENOENT. Turned out that I just needed to append .exe to the command I was using:

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

I had this appear while building gulp-jekyll in Powershell on Windows 11.

nodejs 10 LTS, gulp v3.9.1, ruby 3.1, bundler 2.4.5, jekyll 4.2.2

This line of code here is the cause of the ENOENT issue I had with spawn and bundle.

  return cp.spawn('bundle', [
    'exec', 
    'jekyll', 
    'build', 
    '--source=app', '--destination=build/development', '--config=_config.yml', '--profile'
  ], { stdio: 'inherit' })
  .on('close', done);

Two errors returned, and troubleshooting should start here.

events.js:174
      throw er; // Unhandled 'error' event
      ^
Error: spawn bundle ENOENT

The cp.spawn is not handling an error Event, so handling that with a simple console.log() will expose the real error with debug information:

  return cp.spawn('bundle', [
    'exec', 
    'jekyll', 
    'build', 
    '--source=app', '--destination=build/development', '--config=_config.yml', '--profile'
  ], { stdio: 'inherit' })
  .on('error', (e) => console.log(e))
  .on('close', done);

This now provides a lot more information to debug with.

{ Error: spawn bundle ENOENT
  errno: 'ENOENT',
  code: 'ENOENT',
  syscall: 'spawn bundle',
  path: 'bundle',
  spawnargs:
   [ 'exec',
     'jekyll',
     'build',
     '--source=app',
     '--destination=build/development',
     '--config=_config.yml',
     '--profile' ] }

The next step to debug would be using the nodejs 10 LTS documentation for child_process.spawn(command[, args][, options]). As already described above, adding the { shell: true } to the options of spawn is a working solution. This is what solved my problem as well.

  { stdio: 'inherit', shell: true }

This solution is merely a band-aid and could be refactored to handle all environments, but that is out of scope for how to troubleshoot & debug the spawn ENOENT error on nodejs.

treckstar
  • 1,956
  • 5
  • 21
  • 26
0

I was getting this error when trying to debug a node.js program from within VS Code editor on a Debian Linux system. I noticed the same thing worked OK on Windows. The solutions previously given here weren't much help because I hadn't written any "spawn" commands. The offending code was presumably written by Microsoft and hidden under the hood of the VS Code program.

Next I noticed that node.js is called node on Windows but on Debian (and presumably on Debian-based systems such as Ubuntu) it's called nodejs. So I created an alias - from a root terminal, I ran

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

and this solved the problem. The same or a similar procedure will presumably work in other cases where your node.js is called nodejs but you're running a program which expects it to be called node, or vice-versa.

MTGradwell
  • 151
  • 2
  • 2
0

If you're on Windows Node.js does some funny business when handling quotes that may result in you issuing a command that you know works from the console, but does not when run in Node. For example the following should work:

spawn('ping', ['"8.8.8.8"'], {});

but fails. There's a fantastically undocumented option windowsVerbatimArguments for handling quotes/similar that seems to do the trick, just be sure to add the following to your opts object:

const opts = {
    windowsVerbatimArguments: true
};

and your command should be back in business.

 spawn('ping', ['"8.8.8.8"'], { windowsVerbatimArguments: true });
Joel B
  • 12,082
  • 10
  • 61
  • 69
  • Don't quote the arguments inside the array – laconbass Jun 29 '17 at 08:24
  • @laconbass This is an obviously trivial example to convey the concept and so the quotes could be removed. However, there are cases where you absolutely need to quote the arguments (for example if you need to pass an argument that has a path with a space in it: _"C:\Program Files\..."_). I posted it here because, even though it may not have been the cause of your specific error case, it will hopefully help someone else experiencing this cryptic error because of Node's handling of quotes on Windows like I was encountering. – Joel B Jun 30 '17 at 23:51
  • node.js already makes some Black Magic and silently quotes arguments "properly". Your example should work without the undocumented option you mention, by unquoting argument inside the array. – laconbass Jul 04 '17 at 23:00
  • Just to add my own experience, I was running a java process from node. This error happened to me because of quotes around the command, rather than the argument. Test with spaces in the command path and it still works without quotes – Troncoso Nov 16 '18 at 12:47
0

Although it may be an environment path or another issue for some people, I had just installed the Latex Workshop extension for Visual Studio Code on Windows 10 and saw this error when attempting to build/preview the PDF. Running VS Code as Administrator solved the problem for me.

Steve
  • 79
  • 2
  • 1
    Again, related do filesystem path some way. The extension probably can't reach a path without admin permissions – laconbass May 05 '20 at 17:08
0

In my case removing node, delete all AppData/Roaming/npm and AppData/Roaming/npm-cache and installing node once again solve the issue.

SkorpEN
  • 2,491
  • 1
  • 22
  • 28
0

Recently I also faced similar issue.

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.

It was due to having a wrong configuration in .env file for BROWSER. I had BROWSER=null, but it has to be BROWSER=none. Changing that configuration resolved my issue.

Chathurika Sandarenu
  • 1,368
  • 13
  • 25
0

Tried all nothing worked , my system has different issue .

The working solution for me is run command : npm config set script-shell "C:\Program Files\git\bin\bash.exe"

Sunil Jakhar
  • 219
  • 2
  • 9
  • Your issue seems more related to `npm` itself rather than to node's `child_process.spawn()`. And seems like a windows quirk – laconbass May 07 '21 at 13:13
-1

I got the same error for windows 8.The issue is because of an environment variable of your system path is missing . Add "C:\Windows\System32\" value to your system PATH variable.

Chaya Sandamali
  • 657
  • 9
  • 22
-1

Local development on Emulator

Make sure to have the package installed locally. By changing the spawn command with exec i got a more detailed error and found out I didn't install the package. Simply run, to check if the package is present:

brew install imagemagick

Source

Paul
  • 1,349
  • 1
  • 14
  • 26
-1

There might be a case that you have two package-lock.json files in your project directory (in/out of the main folder), simply delete the one which would have been created accidentally. Delete the build folder and run the server again.

Harshit Pant
  • 1,032
  • 11
  • 14
-3

Add C:\Windows\System32\ to the path environment variable.

Steps

  1. Go to my computer and properties

  2. Click on Advanced settings

  3. Then on Environment variables

  4. Select Path and then click on edit

  5. Paste the following if not already present: C:\Windows\System32\

  6. Close the command prompt

  7. Run the command that you wanted to run

Windows 8 Environment variables screenshot

Emile Bergeron
  • 17,074
  • 5
  • 83
  • 129
-3

For me I made following changes in package.json.

  "version": "0.0.0",
  "scripts": {
    "dev": "vite --open",    // delete this line
    "dev": "vite",           // with this one
   .....
  }
Jiancong
  • 67
  • 1
  • 7