跳到主内容

发布和更新

学习目标

如果你一直跟着学习,这就是教程的最后一步了!在这一部分中,你将把应用发布到 GitHub 发布页面,并集成自动更新功能到你的应用代码中。

使用 update.electronjs.org

Electron 维护者在 https://update.electronjs.org 提供了一个免费的开源应用自动更新服务。它的要求包括:

  • 你的应用运行在 macOS 或 Windows 上
  • 你的应用有一个公共的 GitHub 仓库
  • 构建版本发布到 GitHub 发布页面
  • 构建版本必须代码签名 (仅限 macOS)

至此,我们假设你已经将所有代码推送到了一个公共 GitHub 仓库。

其他更新服务

如果你使用其他仓库托管平台(例如 GitLab 或 Bitbucket),或者你需要保持你的代码仓库私有,请参考我们的分步指南,了解如何托管自己的 Electron 更新服务器。

发布 GitHub 版本

Electron Forge 拥有发布器插件,可以自动将你的打包应用分发到各种来源。在本教程中,我们将使用 GitHub Publisher,它允许我们将代码发布到 GitHub 版本。

生成个人访问令牌

未经许可,Forge 无法发布到 GitHub 上的任何仓库。你需要传递一个已认证的令牌,以便 Forge 访问你的 GitHub 版本。最简单的方法是创建一个新的个人访问令牌(PAT),范围设置为 public_repo,这将赋予对你的公共仓库的写入权限。请务必保密此令牌。

设置 GitHub 发布器

安装模块

Forge 的GitHub 发布器是一个插件,需要在你的项目的 devDependencies 中安装。

npm install --save-dev @electron-forge/publisher-github

在 Forge 中配置发布器

安装完成后,你需要在 Forge 配置中进行设置。完整的选项列表在 Forge 的PublisherGitHubConfig API 文档中有详细说明。

forge.config.js
module.exports = {
publishers: [
{
name: '@electron-forge/publisher-github',
config: {
repository: {
owner: 'github-user-name',
name: 'github-repo-name'
},
prerelease: false,
draft: true
}
}
]
}
发布前暂存版本

请注意,你已将 Forge 配置为将你的发布版本作为草稿发布。这可以让你查看包含生成工件的发布版本,而无需实际发布给最终用户。在编写发布说明并仔细检查你的分发版本是否正常工作后,你可以通过 GitHub 手动发布你的版本。

设置你的身份验证令牌

你还需要让发布器知道你的身份验证令牌。默认情况下,它将使用存储在 GITHUB_TOKEN 环境变量中的值。

运行发布命令

将 Forge 的发布命令添加到你的 npm 脚本中。

package.json
  //...
"scripts": {
"start": "electron-forge start",
"package": "electron-forge package",
"make": "electron-forge make",
"publish": "electron-forge publish"
},
//...

此命令将运行你配置的 makers,并将输出的可分发文件发布到新的 GitHub 版本。

npm run publish

默认情况下,这只会为你的主机操作系统和架构发布一个可分发文件。你可以通过向 Forge 命令传递 --arch 标志来为不同的架构发布。

此版本的名称将对应于项目 package.json 文件中的 version 字段。

标记发布

可选地,你还可以在 Git 中标记你的发布,以便将发布与代码历史中的一个标记点关联起来。npm 提供了一个方便的npm version 命令,可以帮你处理版本升级和标记。

附加:在 GitHub Actions 中发布

本地发布可能会很痛苦,特别是你只能为你的主机操作系统创建可分发文件(例如,你不能在 macOS 上发布 Windows .exe 文件)。

一个解决方案是通过自动化工作流(例如GitHub Actions)发布你的应用,它可以在云端运行 Ubuntu、macOS 和 Windows 上的任务。这正是Electron Fiddle所采用的方法。你可以参考 Fiddle 的构建和发布流程以及Forge 配置以获取更多详细信息。

配置你的更新器代码

现在我们通过 GitHub 版本有了功能性的发布系统,接下来需要告诉 Electron 应用在新版本发布时下载更新。Electron 应用通过 autoUpdater 模块实现此功能,该模块从更新服务器 feed 读取信息,检查是否有新版本可供下载。

update.electronjs.org 服务提供了一个更新器兼容的 feed。例如,Electron Fiddle v0.28.0 将检查端点 https://update.electronjs.org/electron/fiddle/darwin/v0.28.0,查看是否有更新的 GitHub 版本可用。

你的版本发布到 GitHub 后,update.electronjs.org 服务应该就能为你的应用工作了。剩下的唯一一步是使用 autoUpdater 模块配置 feed。

为了简化此过程,Electron 团队维护了 update-electron-app 模块,它只需一个函数调用即可为 update.electronjs.org 设置 autoUpdater 的样板代码,无需配置。该模块将查找与你项目 package.json 中的 "repository" 字段匹配的 update.electronjs.org feed。

首先,将此模块作为运行时依赖项安装。

npm install update-electron-app

然后,导入此模块并在主进程中立即调用它。

main.js
require('update-electron-app')()

就是这么简单!一旦你的应用被打包,它将为你发布的每一个新的 GitHub 版本进行自我更新。

总结

在本教程中,我们配置了 Electron Forge 的 GitHub Publisher,将你应用的打包文件上传到 GitHub 版本。由于可分发文件不能总是在不同平台之间生成,如果你没有相应的机器,我们建议在持续集成 (Continuous Integration) 流程中设置构建和发布流程。

Electron 应用可以通过将 autoUpdater 模块指向更新服务器 feed 来进行自我更新。update.electronjs.org 是 Electron 为发布在 GitHub 版本上的开源应用提供的免费更新服务器。配置你的 Electron 应用使用此服务就像安装并导入 update-electron-app 模块一样简单。

如果你的应用不符合使用 update.electronjs.org 的条件,你应该部署自己的更新服务器并自行配置 autoUpdater 模块。

🌟 你完成了!

至此,你已正式完成了我们的 Electron 教程。欢迎探索我们文档的其他部分,开发愉快!如果你有问题,请光临我们的社区 Discord 服务器