发布和更新
学习目标
如果你一直跟随操作,那么这是教程的最后一步!在本部分中,你将把你的应用程序发布到 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 配置为将 release 发布为草稿。这将允许你在实际发布给最终用户之前,看到带有生成工件的 release。你可以在撰写 release 说明并仔细检查分发文件是否正常工作后,通过 GitHub 手动发布你的 releases。
设置认证令牌
你还需要让 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 命令来为不同的架构发布。
此 release 的名称将对应于你项目 package.json 文件中的 version
字段。
你还可以 在 Git 中标记你的 releases,以便将 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
- 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 服务器。