Skip to content

介绍

项目入口文件及生命周期

入口 main.js

启动 ElectronEgg

javascript
const { ElectronEgg } = require('ee-core');
const { Lifecycle } = require('./preload/lifecycle');
const { preload } = require('./preload');

// new app
const app = new ElectronEgg();

// register lifecycle
const life = new Lifecycle();
app.register("ready", life.ready);
app.register("electron-app-ready", life.electronAppReady);
app.register("window-ready", life.windowReady);
app.register("before-close", life.beforeClose);

// register preload
app.register("preload", preload);

// run
app.run();

生命周期

./electron/preload/lifecycle.js 模块,加载顺序如下:

javascript
'use strict';

const { logger } = require('ee-core/log');
const { getConfig } = require('ee-core/config');
const { getMainWindow } = require('ee-core/electron');

class Lifecycle {

  /**
   * core app have been loaded
   * 加载
   * exception -> config -> log -> controller -> socket -> ready()
   */
  async ready() {
    logger.info('[lifecycle] ready');
  }

  /**
   * electron app ready
   * 加载以下事件
   * app.on('second-instance')
   * app.whenReady().then() 该事件会创建 mainWindow
   * app.on('window-all-closed')
   * app.on('before-quit')
   * 然后触发
   * -> electronAppReady()
   */
  async electronAppReady() {
    logger.info('[lifecycle] electron-app-ready');
  }

  /**
   * main window have been loaded
   * mainWindow 被创建后,加载
   * windowReady()
   */
  async windowReady() {
    logger.info('[lifecycle] window-ready');
    // 延迟加载,无白屏
    const { windowsOption } = getConfig();
    if (windowsOption.show == false) {
      const win = getMainWindow();
      win.once('ready-to-show', () => {
        win.show();
        win.focus();
      })
    }
  }

  /**
   * before app close
   */  
  async beforeClose() {
    logger.info('[lifecycle] before-close');
  }
}
Lifecycle.toString = () => '[class Lifecycle]';

module.exports = {
  Lifecycle
};