发布和更新
学习目标
如果你一直跟着教程,这是教程的最后一步! 在本部分中,你将把你的应用发布到 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
- Yarn
npm install --save-dev @electron-forge/publisher-github
yarn add --dev @electron-forge/publisher-github
在 Forge 中配置 Publisher
安装完成后,需要在 Forge 配置中进行设置。 完整的选项列表记录在 Forge 的 PublisherGitHubConfig API 文档中。
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 的 publish 命令添加到你的 npm 脚本中。
//...
"scripts": {
"start": "electron-forge start",
"package": "electron-forge package",
"make": "electron-forge make",
"publish": "electron-forge publish"
},
//...
此命令将运行你配置的 makers 并将输出分发包发布到新的 GitHub Release。
- npm
- Yarn
npm run publish
yarn run publish
默认情况下,这只会发布针对你的宿主机操作系统和架构的单个分发包。 你可以通过将 --arch 标志传递给你的 Forge 命令来为不同的架构发布。
此发布名称将对应于你的项目 package.json 文件中的 version 字段。
可选地,你还可以 在 Git 中标记你的发布,以便你的发布与代码历史记录中的标记点相关联。 npm 附带一个方便的 npm version 命令,可以为你处理版本升级和标记。
奖励:在 GitHub Actions 中发布
本地发布可能很麻烦,特别是由于你不能在所有平台上生成分发包(例如,你无法从 macOS 发布 Windows .exe 文件)。
对此的解决方案是通过自动化工作流程(例如 GitHub Actions)发布你的应用,这些工作流程可以在云端运行 Ubuntu、macOS 和 Windows 上的任务。 这是 Electron Fiddle 采用的完全相同的方法。 你可以参考 Fiddle 的 构建和发布管道 和 Forge 配置 以获取更多详细信息。
配置你的更新器代码
现在我们已经通过 GitHub Releases 建立了一个功能性的发布系统,现在我们需要告诉我们的 Electron 应用在发布新版本时下载更新。 Electron 应用通过 autoUpdater 模块来执行此操作,该模块从更新服务器 feed 读取以检查是否有新版本可供下载。
update.electronjs.org 服务提供与 updater 兼容的 feed。 例如,Electron Fiddle v0.28.0 将检查端点 https://update.electronjs.org/electron/fiddle/darwin/v0.28.0,以查看是否有更新的 GitHub Release 可用。
发布到 GitHub 后,update.electronjs.org 服务应适用于你的应用。 剩下的步骤是在 autoUpdater 模块中配置 feed。
为了使此过程更轻松,Electron 团队维护了 update-electron-app 模块,该模块通过一个函数调用为 update.electronjs.org 设置 autoUpdater 的样板代码——无需配置。 此模块将搜索与你的 package.json "repository" 字段匹配的 update.electronjs.org feed。
首先,将模块作为运行时依赖项安装。
- npm
- Yarn
npm install update-electron-app
yarn add update-electron-app
然后,导入模块并在主进程中立即调用它。
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 服务器。