[英]Electron Quick Start in NodeJS Child Process
我試圖將Gulp設置與調試electron-quick-start結合起來,並且我嘗試在源文件中發生更改時關閉並重新打開Electron,這是我使用child_process.spawn
實現的,並且啟動它工作正常,並且關閉似乎很好,但是電子應用程序仍處於活動狀態,並且打開了一個新應用程序-即使它在自己的主進程中運行,使用cmd+C
發送SIGINT
也會關閉應用程序外殼。 我已將代碼簡化為以下代碼段,並添加了倒數計時,以確保不是時間問題。 另外, electron-quick-start
的整個存儲庫實際上位於./app/
文件夾中,因為我的Gulp會./app/
在它的外部,它只是輸出到應用程序資源文件夾中。
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 Quick Start應用程序嗎?
我對您的問題感到困惑,但我想與您分享我的gulp文件,該文件用於觀看我的項目文件並重新加載應用程序:)
'use strict';
var gulp = require('gulp');
var electron = require('electron-connect').server.create();
gulp.task('start',function(){
electron.start();
})
gulp.task('serve', function () {
// Start browser process
electron.start();
// Restart browser process
gulp.watch('app.js', electron.restart);
// Reload renderer process
gulp.watch(["./src/*.*","./src/**/*.*"], electron.reload);
});
gulp.task('reload:browser', function () {
// Restart main process
electron.restart();
});
gulp.task('reload:renderer', function () {
// Reload renderer process
electron.reload();
});
gulp.task('default', ['serve']);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.