Node.js 异步执行子进程, 并且实时输出内容

49 阅读1分钟

Node.js 执行子进程, 并且满足下面条件

  1. 异步执行
  2. 实时输出子进程打印的信息
  3. 执行结束后能拿到子进程打印的信息
const { spawn } = require('child_process');

function executeCommand(command, options, isOutput = true) {
    return new Promise((resolve, reject) => {
        const childProcess = spawn(command, { shell: true, ...options });
        let output = '';

        childProcess.stdout.on('data', (data) => {
            data = data.toString();
            isOutput && process.stdout.write(data); // 如果用 console.log 会在输出末尾添加换行符
            output += data;
        });

        childProcess.stderr.on('data', (data) => {
            reject(data.toString());
        });

        childProcess.on('close', (code) => {
            if (code === 0) {
                resolve(output.trim());
            } else {
                reject(`Command exited with code ${code}`);
            }
        });

        childProcess.on('error', (error) => {
            reject(error.toString());
        });
    });
}

executeCommand('yarn')
    .then((output) => {
        // console.log('Command output:', output);
    })
    .catch((error) => {
        console.error('Error:', error);
    });