Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: spawn npm ENOENT

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 ?

like image 588
Armen Sanoyan Avatar asked Apr 05 '17 11:04

Armen Sanoyan


People also ask

What is Enoent error?

The enoent meaning error no entry. This is used for more than files or dictionaries.

What is spawn node JS?

spawn() : The spawn function launches a command in a new process and you can use it to pass that command any arguments. It's the most generic spawning function and all other functions are built over it [docs]. child_process. execFile() : The execFile function is similar to child_process.


2 Answers

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

like image 54
Armen Sanoyan Avatar answered Oct 02 '22 15:10

Armen Sanoyan


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.

like image 33
Cava Avatar answered Oct 02 '22 14:10

Cava