错误:spawn npm ENOENT

46

我有一个JS应用程序,在Linux上运行良好,但在Windows 10上出现错误。

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

错误的代码如下

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()));
});

我在GitHub上找到了这个错误的原因。 我猜问题出在 Node.js spawn文档 上,它在Windows上没有正常工作。但是我不知道如何修改代码片段以使其正常工作。 有人可以帮助我吗?


尝试在这里查看建议:https://dev59.com/SV4c5IYBdhLWcg3wqLte 和 https://dev59.com/YVsX5IYBdhLWcg3wHsdv,以获取有关该错误的更多信息。 - Strelok
你正在使用哪个版本的NodeJS? - Pramod Patil
@PramodPatil v7.6.0 - Armen Sanoyan
4个回答

89

刚刚改了这一行

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

到这一行

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

检查操作系统,如果是Windows,则运行npm.cmd;如果是Linux,则直接运行npm。


1
你要在哪里添加这行代码?是在 event.js 文件中吗? - ERJAN
4
奇怪的是,我可以正常地在命令行中单独调用npm,但这肯定也解决了我的问题。救星啊! - D.Meganoski
也使用 npx 为我解决了这个问题。 - Bruno Tavares
在整个项目中搜索 spawn(' 并按照此答案中的建议进行替换。 - khashashin

6

我知道这个问题已经存在很长时间了,也有正确的答案,我的解决方法基于@Armen Sanoyan的答案和如何使用Node.js确定当前操作系统

对我来说,@Armen Sanoyan的答案不起作用,但是对我帮助很大。我改为使用以下代码行,就可以起到作用。

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

我很愿意提供帮助。

3

我知道这似乎是显而易见的,但请确保您不要将多个标志/选项放入单个字符串中:

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

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

1
我遇到了同样的问题。我的应用程序代码在MAC上运行良好,但在Windows上,与spawn命令相关的代码会出现错误。
当使用命令提示符运行时,会出现错误。
当我使用GIT bash启动应用程序时,就不会出现错误。我不需要改变任何代码。

我不得不从代码仓库中删除favicon.ico文件,因为当这个文件存在于我的本地Windows机器上时,我无法启动应用程序,会出现一些错误。 - firstpostcommenter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接