【发布时间】:2018-03-24 19:08:44
【问题描述】:
我正在尝试将 Gulp 设置与调试电子快速启动相结合,当我使用 child_process.spawn 实现的源文件发生更改时,我试图关闭并重新打开 Electron,然后启动它就可以了很好,关闭似乎很好,但电子应用程序仍然处于活动状态,并且一个新的应用程序处于打开状态 - 即使它在自己的主进程中运行,使用 cmd+C 发送 SIGINT 也会关闭应用程序外壳。我已将我的代码简化为以下 sn-p,并添加了一个倒计时,以确保不是时间问题。此外,electron-quick-starts 整个存储库实际上是在 ./app/ 文件夹内,因为我的 Gulp 将位于它之外,它只是输出到应用程序资源文件夹内。
function destroyElectron(){
return new Promise(function( resolve, reject ){
if( electron ){
console.log( 'Closing Electron...' );
electron.on( 'close', () => {
console.log( 'Electron Event: Close' );
resolve();
});
electron.on( 'exit', () => {
console.log( 'Electron Event: Exit' );
resolve();
});
electron.kill( 'SIGINT' );
electron = null;
} else {
resolve();
}
});
}
function startElectron(){
destroyElectron().then(() => {
console.log( 'Starting Electron...' );
electron = spawn( 'npm', [ 'start' ], { stdio: 'inherit', cwd: './app' } );
electron.on( 'close', destroyElectron );
});
}
var spawn = require( 'child_process' ).spawn;
var electron;
var count = 0;
startElectron();
var interval = setInterval(function(){
if( ++count == 10 ){
clearInterval( interval );
destroyElectron().then(() => {
console.log( 'Electron is destroyed' );
});
} else {
console.log( 10 - count );
}
}, 1000 );
为什么在命令行中手动结束它与手动发送信号有不同的效果?我可以关闭在子进程中运行的完整 Electron 快速启动应用程序吗?
【问题讨论】:
标签: javascript node.js electron child-process