Error: spawn npm ENOENT

36,574

Solution 1

Just changed this line

const child = spawn('npm', ['run', service]);

to this line

  const child = spawn(/^win/.test(process.platform) ? 'npm.cmd' : 'npm', ['run',  service]);

Which is checking the operating system if ti's windows it runs npm.cmd if it's linux just npm

Solution 2

I know there is a correct answer and this question has been around for a long time, my solution is based on the answer @Armen Sanoyan and How do I determine the current operating system with Node.js

For me the @Armen Sanoyan answer does not work, but help a lot. I changed for this line and work.

const child = (process.platform === 'win32' ? 'npm.cmd' : 'npm') + ' run ' + service;

I hope I can help.

Solution 3

I faced the same problem. My application code was running fine in MAC but in Windows it was giving an error about the code related to the spawn command

The error occurs when running using command prompt

When I used GIT bash to start the application then the error did not occur. I did not need to change any code

Solution 4

I know this seems obvious but make sure you're not putting several flags/options into a single string:

// do not do this
spawn('pnpm', ['-r', 'exec', '--', 'pnpm version patch'])

// do this
spawn('pnpm', ['-r', 'exec', '--', 'pnpm', 'version', 'patch'])
Share:
36,574
Armen Sanoyan
Author by

Armen Sanoyan

Programming languages - Python, JS, sql Libraries - Django, flask, Django rest api, google api... Databases - MongoDB, Postgresql, sqlite, firebase, firestore

Updated on June 17, 2021

Comments

  • Armen Sanoyan
    Armen Sanoyan almost 3 years

    I have an JS app. It works good on linux but in windows 10 I am getting an error.

    events.js:161
      throw er; // Unhandled 'error' event
      ^
    
    Error: spawn npm ENOENT
        at exports._errnoException (util.js:1028:11)
        at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
        at onErrorNT (internal/child_process.js:359:16)
        at _combinedTickCallback (internal/process/next_tick.js:74:11)
        at process._tickCallback (internal/process/next_tick.js:98:9)
        at Module.runMain (module.js:607:11)
        at run (bootstrap_node.js:422:7)
        at startup (bootstrap_node.js:143:9)
        at bootstrap_node.js:537:3
    

    and the code which is incorrect is this

    const spawn = require('child_process').spawn;
    
    const watching = [
      // {service: "babel-watch"},
      {service: "webpack-watch"},
      // {service: "sass-watch"},
      {service: "server-watch"}
    ];
    
    watching.forEach(({service}) => {
      const child = spawn('npm', ['run', service]);
      child.stdout.on('data', d => console.log(d.toString()));
      child.stderr.on('data', d => console.log(d.toString()));
    });
    

    I found the reason of this error in github I guess the problem is spawn nodejs spawn Doc which have didn't work correctly in windows. But I don't know how to modify this snippet of code to make it work. Can someone help me ?