利用Node.js编写跨平台的spawn语句

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

 

posted @ 2017-08-17 17:30  hobotree  阅读(2082)  评论(0编辑  收藏  举报