【问题标题】:Electron Quick Start in NodeJS Child ProcessNodeJS 子进程中的 Electron 快速入门
【发布时间】: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


    【解决方案1】:

    我对您的问题感到困惑,但我想与您分享我的 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']);
    

    【讨论】:

    • 这很酷,但是我要解决的问题是我想将我的 gulp 放在父目录中,运行监视任务等......虽然所有电子组件等都很好分隔在名为app 的子目录中。我试图让这个electron-connect 工作,但它似乎需要电子存在于同一目录中......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多