你真的了解 Electron 的自动更新吗?揭秘AppUpdater 类的内部工作原理

本文首发同名微信公众号:前端徐徐

大家好,我是徐徐。今天我们聊聊 Electron 的更新工作原理。

前言

Electron 应用的自动更新是保持应用程序最新、修复 bug 和添加新功能的重要机制。本文将深入分析 electron-builder 的 AppUpdater 类的源码,梳理出完整的更新流程,以帮助开发者更好地理解和使用 Electron 的自动更新功能,相信读了这篇文章你会对 Electron 更新中的一些奇奇怪怪的问题会有一些眉目。

源码位置

https://github1s.com/electron-userland/electron-builder/blob/master/packages/electron-updater/src/AppUpdater.ts

AppUpdater类概览

AppUpdaterElectron 自动更新的核心类,它继承自 EventEmitter。 继承 EventEmitter 的主要原因是为了提供事件机制,使 AppUpdater 类能够在其生命周期的不同阶段发出各种事件。这种机制可以让应用的其他部分或外部代码通过监听这些事件,作出相应的反应。这种设计带来了灵活性和可扩展性,使得应用程序可以更好地响应和处理更新过程中的各种情况 这个类的主要职责包括:

  • 配置更新源: setFeedURL 方法设置更新服务器的地址。这一步确定了应用从哪里获取更新。
  • 检查更新: checkForUpdates 方法检查是否有新版本可用。这一步确保应用始终是最新版本,提高用户体验。
  • 下载更新: downloadUpdate 方法负责下载更新文件。下载更新文件是更新过程的关键步骤,保证新版本在用户设备上可用。
  • 安装更新: quitAndInstall 方法退出应用并安装更新。这个方法在确保用户获得更新后,方便地进行更新安装。
  • 事件通知: 继承自 EventEmitter,可以触发更新相关的事件。通过事件机制,开发者可以在更新的各个阶段进行响应,提供用户友好的更新体验。

关键属性:

autoDownload = true; // 是否自动下载更新
autoInstallOnAppQuit = true; // 是否在应用退出时自动安装更新
allowPrerelease = false; // 是否允许更新到预发布版本
allowDowngrade = false; // 是否允许降级

初始化配置

在构造函数中,AppUpdater 会进行一系列初始化操作:

constructor(options: AllPublishOptions | null | undefined, app?: AppAdapter) {
   
   
  super();
  
  // 设置当前版本
  const currentVersion = parseVersion(this.app.version);
  this.currentVersion = currentVersion;
  
  // 根据当前版本决定是否允许预发布版本
  this.allowPrerelease = hasPrereleaseComponents(currentVersion);
  
  // 如果提供了选项,设置更新源
  if (options != null) {
   
   
    this.setFeedURL(options);
  }
}
  • 设置当前版本: parseVersion(this.app.version) 将当前应用的版本解析并设置为 currentVersion。确保更新机制知道当前版本,以便正确判断是否需要更新。
  • 是否允许预发布版本: hasPrereleaseComponents(currentVersion) 决定是否允许更新到预发布版本。对开发者来说,这一步可以控制是否向用户推送预发布版本。
  • 设置更新源: 如果提供了选项,调用 setFeedURL 设置更新服务器地址。初始化时配置更新源,确保应用知道从哪里获取更新。

检查更新流程

checkForUpdates 方法是更新流程的起点:

async checkForUpdat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值