semillero-INVIMA/scripts/dev.js

61 lines
1.2 KiB
JavaScript

const { spawn } = require('child_process');
const path = require('path');
const rootDir = path.resolve(__dirname, '..');
const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
const commands = [
{
name: 'backend',
cwd: path.join(rootDir, 'backend'),
args: ['run', 'dev']
},
{
name: 'frontend',
cwd: path.join(rootDir, 'semillero'),
args: ['start']
}
];
const children = [];
let shuttingDown = false;
const stopAll = (exitCode = 0) => {
if (shuttingDown) return;
shuttingDown = true;
for (const child of children) {
if (!child.killed) {
child.kill('SIGTERM');
}
}
setTimeout(() => process.exit(exitCode), 300);
};
for (const command of commands) {
const child = spawn(npmCmd, command.args, {
cwd: command.cwd,
env: process.env,
stdio: 'inherit',
shell: false
});
children.push(child);
child.on('exit', (code, signal) => {
if (shuttingDown) return;
if (code === 0 || signal) {
console.log(`[dev] ${command.name} finalizo.`);
stopAll(0);
return;
}
console.error(`[dev] ${command.name} fallo con codigo ${code}.`);
stopAll(code || 1);
});
}
process.once('SIGINT', () => stopAll(0));
process.once('SIGTERM', () => stopAll(0));