node
const child = cp.spawn('npm', ['run', 'build']);
报错
events.js:182
throw er; // Unhandled 'error' event
^
Error: spawn npm ENOENT
at exports._errnoException (util.js:1016:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:189:19)
at onErrorNT (internal/child_process.js:366:16)
at _combinedTickCallback (internal/process/next_tick.js:102:11)
at process._tickCallback (internal/process/next_tick.js:161:9)
原因:
当我们执行 npm 时,我们实际执行的是 npm.cmd 批处理,而在 Windows 上,.cmd, .bat 批处理是无法脱离 cmd.exe 这一解释器而单独运行的
解决方案:
1.显式地调用 cmd,
spawn('cmd', ['/c', 'npm'], {
stdio: 'inherit'
});
2.调用 spawn 函数时,设置 shell 选项为 true 以隐式地调用 cmd (该选项添加自 Node.js v6 版本)
spawn('npm', {
stdio: 'inherit',
shell: true
});
针对最上面的代码,可以修改为:
const child = cp.spawn('npm', ['run', 'build'], { shell: process.platform === 'win32' });
相关链接:
zzz.buzz:Node.js 编写跨平台 spawn 语句
本文介绍了解决在Windows平台上使用Node.js时遇到的npm spawn ENOENT错误的方法。当尝试通过spawn运行npm命令时可能会出现此问题,因为npm需要通过cmd.exe解释器来执行。文中提供了两种解决方案:一是显式地调用cmd;二是通过设置spawn函数的shell选项为true以隐式调用cmd。此外还给出了一个修改后的示例代码。
1528

被折叠的 条评论
为什么被折叠?



