Node.js 执行子进程, 并且满足下面条件
- 异步执行
- 实时输出子进程打印的信息
- 执行结束后能拿到子进程打印的信息
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);
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) => {
})
.catch((error) => {
console.error('Error:', error);
});