子进程ENOENT错误

Error: spawn ENOENT

ENOENT: No such directory entry

示例代码

main.js:

'use strict';
const spawn = require('child_process').spawn;
function runCommand(commandStr, args, cwd) {
  console.log(`command:${commandStr} ${args.join(' ')}`);
  let command = spawn(commandStr, args, {
    cwd: cwd
  });
  return new Promise((resolve, reject) => {
    command.on('close', code => {
      resolve(code);
    });
  });
}
...
runCommand('git', ['status']);

两种环境下,执行:

Error: spawn git ENOENT
    at exports._errnoException (util.js:1026: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._tickDomainCallback (internal/process/next_tick.js:122:9)

断点到child_process.js发现,直接使用node main.js,会带有参数shell: true,加上这个参数以后代码执行正常。

未完待续~