跳转到主要内容

发布和更新

学习目标

如果您一直跟着教程学习,那么这就是教程的最后一步!在这一部分,您将把您的应用程序发布到 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
}
}
]
}
草稿发布

请注意,您已将 Forge 配置为将发布版本作为草稿。这将允许您在不实际发布给最终用户的情况下,查看带有生成工件的版本。您可以手动通过 GitHub 发布版本,然后在编写发布说明并仔细检查分发文件是否正常工作后进行发布。

设置认证令牌

您还需要让 Publisher 知道您的认证令牌。默认情况下,它将使用存储在 GITHUB_TOKEN 环境变量中的值。

运行发布命令

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

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

此命令将运行您配置的生成器,并将输出的分发文件发布到新的 GitHub Release。

npm run publish

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

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

打标签

您还可以选择性地 在 Git 中标记您的 Release,以便您的 Release 与代码历史中的某个标记点相关联。npm 提供了一个方便的 npm version 命令,可以为您处理版本升级和标记。

奖励:在 GitHub Actions 中发布

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

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

集成更新器代码

既然我们已经有了一个通过 GitHub Releases 实现的可用发布系统,现在我们需要告诉我们的 Electron 应用程序在有新 Release 时下载更新。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 服务器