mirror of
https://github.com/WeBankFinTech/fes.js.git
synced 2025-04-05 03:05:07 +08:00
61 lines
1.5 KiB
JavaScript
61 lines
1.5 KiB
JavaScript
import {
|
|
fork
|
|
} from 'child_process';
|
|
|
|
const usedPorts = [];
|
|
let CURRENT_PORT;
|
|
|
|
export default function start({
|
|
scriptPath
|
|
}) {
|
|
const execArgv = process.execArgv.slice(0);
|
|
const inspectArgvIndex = execArgv.findIndex(argv => argv.includes('--inspect-brk'),);
|
|
|
|
if (inspectArgvIndex > -1) {
|
|
const inspectArgv = execArgv[inspectArgvIndex];
|
|
execArgv.splice(
|
|
inspectArgvIndex,
|
|
1,
|
|
inspectArgv.replace(/--inspect-brk=(.*)/, (match, s1) => {
|
|
let port;
|
|
try {
|
|
port = parseInt(s1, 10) + 1;
|
|
} catch (e) {
|
|
port = 9230; // node default inspect port plus 1.
|
|
}
|
|
if (usedPorts.includes(port)) {
|
|
port += 1;
|
|
}
|
|
usedPorts.push(port);
|
|
return `--inspect-brk=${port}`;
|
|
}),
|
|
);
|
|
}
|
|
|
|
// set port to env when current port has value
|
|
if (CURRENT_PORT) {
|
|
// @ts-ignore
|
|
process.env.PORT = CURRENT_PORT;
|
|
}
|
|
|
|
const child = fork(scriptPath, process.argv.slice(2), {
|
|
execArgv
|
|
});
|
|
|
|
child.on('message', (data) => {
|
|
const type = (data && data.type) || null;
|
|
if (type === 'RESTART') {
|
|
child.kill();
|
|
start({
|
|
scriptPath
|
|
});
|
|
} else if (type === 'UPDATE_PORT') {
|
|
// set current used port
|
|
CURRENT_PORT = data.port;
|
|
}
|
|
process.send && process.send(data);
|
|
});
|
|
|
|
return child;
|
|
}
|