61 lines
1.2 KiB
JavaScript
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));
|