Open2
Nest.js上でCLIコマンドを実行する
選択肢はzxとchildprocessの2つ
zx
googleが公開しているパッケージの1つ。Node.jsでbashを容易に使えるようにするパッケージだが、child_processをラッパーし提供している。
child_process
zxの大元であるはchild_processはサブプロセスを生成する機能を提供するモジュールである。
// spawnで書くとPromiseを使う必要があるが
return new Promise<void>((resolve, reject) => {
const child = spawn(command, args, { shell: true });
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
child.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
child.on('close', (code) => {
if (code === 0) {
resolve();
} else {
reject(new Error(`Command failed with exit code ${code}`));
}
});
});
// spawnSyncを使用すればそのまま書ける
return spawnSync(command, args, { shell: true });