execSync - 如何查看正在进行的脚本执行

execSync - How to see ongoing script execution

我正在使用 execSync 在 javascript 脚本中执行 shell 脚本

const { execSync } = require('child_process');
const shell = (cmd) => execSync(cmd, { encoding: 'utf8' });
shell('node jest');

当我从我的终端 运行 jest 时,我在控制台中看到脚本正在进行的每个步骤。

当我 运行 shell(script) 时,我只在脚本末尾看到整个结果。

问题

我应该如何使用 execSync 实时输出脚本的执行?

经过一番研究,我找到了正确的方法。

child_process.exec() is "synchronously asynchronous", meaning although the .exec is asynchronous, it waits for the child process to end and tries to return all the buffered data at once

child_process.spawn() returns an object with stdout and stderr stream

因此我选择使用 spawn 并创建了

const shellAsync = (cmd) => {
  const script = spawn(cmd);

  script.stdout.on('data', (data) => {
    console.log(`${data}`);
  });

  script.stderr.on('data', (data) => {
    console.error(`${data}`);
  });

  script.on('close', (code) => {
    console.log(`child process exited with code ${code}`);
  });
};