Open2

Nest.js上でCLIコマンドを実行する

hoshitahoshita

選択肢はzxとchildprocessの2つ

zx

googleが公開しているパッケージの1つ。Node.jsでbashを容易に使えるようにするパッケージだが、child_processをラッパーし提供している。

https://github.com/google/zx

child_process

zxの大元であるはchild_processはサブプロセスを生成する機能を提供するモジュールである。

https://nodejs.org/docs/latest-v20.x/api/child_process.html

https://medium.com/the-guild/getting-to-know-nodes-child-process-module-8ed63038f3fa

https://qiita.com/mazxxxry/items/eb2036b28f75eb39333c

hoshitahoshita
  // 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 });