跳到主要内容

发布和更新

学习目标

如果您一直跟着学习,那么这是本教程的最后一步!在这一部分,您将把您的应用发布到 GitHub Releases,并将自动更新集成到您的应用代码中。

使用 update.electronjs.org

Electron 维护者在 https://update.electronjs.org 为开源应用提供免费的自动更新服务。其要求是

  • 您的应用在 macOS 或 Windows 上运行
  • 您的应用有一个公共 GitHub 仓库
  • 构建发布到 GitHub Releases
  • 构建已 代码签名 (仅限 macOS)

在这一点上,我们假设您已经将所有代码推送到公共 GitHub 仓库。

备选更新服务

如果您使用备选仓库托管服务(例如 GitLab 或 Bitbucket),或者您需要保持代码仓库私有,请参阅我们的关于托管您自己的 Electron 更新服务器的分步指南

发布 GitHub Release

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

生成个人访问令牌

未经许可,Forge 无法发布到 GitHub 上的任何仓库。您需要传入一个经过身份验证的令牌,以授予 Forge 访问您的 GitHub Releases 的权限。最简单的方法是创建一个新的个人访问令牌 (PAT),其作用域为 public_repo,这将授予对您的公共仓库的写入权限。请务必将此令牌保密。

设置 GitHub Publisher

安装模块

Forge 的 GitHub Publisher 是一个插件,需要安装在您项目的 devDependencies

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

在 Forge 中配置 Publisher

安装完成后,您需要在 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
}
}
]
}
在发布前起草 Release

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

设置您的身份验证令牌

您还需要使 Publisher 知道您的身份验证令牌。默认情况下,它将使用存储在 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 Release。

npm run publish

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

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

标记 Release

可选地,您还可以在 Git 中标记您的 Release,以便您的 Release 与代码历史记录中的标记点相关联。npm 附带一个方便的 npm version 命令,可以为您处理版本 bumping 和标记。

奖励:在 GitHub Actions 中发布

在本地发布可能会很麻烦,尤其因为您只能为主机操作系统创建可分发文件(即,您无法从 macOS 发布 Windows .exe 文件)。

对此的解决方案是通过自动化工作流程(例如 GitHub Actions)发布您的应用,它可以在云中的 Ubuntu、macOS 和 Windows 上运行任务。这是 Electron Fiddle 采用的完全相同的方法。您可以参考 Fiddle 的 构建和发布管道Forge 配置 以了解更多详细信息。

检测您的更新器代码

现在我们已经通过 GitHub Releases 有了一个功能完善的发布系统,我们现在需要告诉我们的 Electron 应用,每当有新版本发布时就下载更新。Electron 应用通过 autoUpdater 模块来执行此操作,该模块从更新服务器 feed 读取以检查是否有新版本可供下载。

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

在您的 Release 发布到 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 Release 自行更新。

总结

在本教程中,我们配置了 Electron Forge 的 GitHub Publisher,以将您的应用程序的可分发文件上传到 GitHub Releases。由于可分发文件并非总能在平台之间生成,如果您无法访问机器,我们建议在持续集成管道中设置您的构建和发布流程。

Electron 应用程序可以通过将 autoUpdater 模块指向更新服务器 feed 来实现自我更新。update.electronjs.org 是 Electron 为在 GitHub Releases 上发布的开源应用程序提供的免费更新服务器。配置您的 Electron 应用以使用此服务非常简单,只需安装和导入 update-electron-app 模块即可。

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

🌟 完成!

至此,您已正式完成我们的 Electron 教程。欢迎随意浏览我们文档的其余部分,祝您开发愉快!如果您有任何问题,请访问我们的社区 Discord 服务器