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 语句