Estoy usando execSync para ejecutar un script de shell dentro de un script javascript
const { execSync } = require('child_process'); const shell = (cmd) => execSync(cmd, { encoding: 'utf8' }); shell('node jest'); Cuando ejecuto jest desde mi terminal, veo cada paso en la consola mientras el script está en curso.
Cuando ejecuto shell(script) , solo veo los resultados completos al final del script.
¿Qué debo hacer para generar en vivo la ejecución de un script usando execSync ?
Después de algunas investigaciones, encontré el método adecuado.
child_process.exec() es "sincrónicamente asíncrono", lo que significa que aunque el .exec es asíncrono, espera a que finalice el proceso secundario e intenta devolver todos los datos almacenados en el búfer a la vez
child_process.spawn() devuelve un objeto con stdout y stderr stream
Por lo tanto, opté por usar spawn y creé
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}`); }); };