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

大家好,我是徐徐。今天我们聊聊 Electron 的更新工作原理。
前言
Electron 应用的自动更新是保持应用程序最新、修复 bug 和添加新功能的重要机制。本文将深入分析 electron-builder 的 AppUpdater 类的源码,梳理出完整的更新流程,以帮助开发者更好地理解和使用 Electron 的自动更新功能,相信读了这篇文章你会对 Electron 更新中的一些奇奇怪怪的问题会有一些眉目。
源码位置
AppUpdater类概览
AppUpdater 是 Electron 自动更新的核心类,它继承自 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

最低0.47元/天 解锁文章
506

被折叠的 条评论
为什么被折叠?



