我有以下情况。我有一个在执行脚本authserver.js
时运行的快速服务器。我现在要做的是使用gulp
作为我想要执行的任务之一运行此脚本。我不希望父进程在forforks / spawns子进程时阻塞。我还想控制服务器脚本中的任何stdout输出。到目前为止,这是我尝试过的:
gulpfile.js
gulp.task('directory-changer', changeDirectory);
gulp.task('directory-printer', printCD);
gulp.task('server-start-daemon', compileServer);
gulp.task('mount-spwn-debugger', spwnDbg);
gulp.task('server-start-fork', srvStart);
gulp.task('default', gulp.series(['mount-spwn-debugger','directory-printer', 'server-start-fork']));
function printCD(done) {
console.log(process.cwd());
done();
}
function spwnDbg(done) {
var oldSpawn = child_process.execFile;
function mySpawn() {
console.log('spawn called');
console.log(arguments);
var result = oldSpawn.apply(this, arguments);
return result;
}
function srvStart(done) {
let { fork } = child_process;
let p = fork('runserverd.js');
process.send({ cmd: 'run server'});
process.on('message', m => console.log('Run server daemon: ' + m.status));
done();
}
runserverd.js
let { execFile } = require("child_process");
module.exports = (done) => {
let prcs = 'node';
let subprcs = execFile(prcs, ['authserver.js'], (err, stdout, stderr) => {
if (err) {
console.error('stderr', stderr);
throw err;
}
console.log('stdout', stdout);
});
};
child_process.execFile = mySpawn;
done();
}
当我运行时,它会毫无错误地执行,但是当我尝试导航到服务器的/
地址时,会出现超时(可能是因为服务器没有运行)。有没有办法做我正在尝试的事情?