跳转至

发布和更新

:::info 跟随教程

这是 Electron 教程的第 6 部分。

  1. 先决条件
  2. 构建你的第一个应用
  3. 使用 Preload 脚本
  4. 添加功能
  5. 打包你的应用
  6. 发布和更新

:::

学习目标

如果你一直在跟随教程,这是教程的最后一步!在本部分中, 你将把你的应用发布到 GitHub releases,并在你的应用代码中集成自动更新。

使用 update.electronjs.org

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

  • 你的应用运行在 macOS 或 Windows 上
  • 你的应用有一个公开的 GitHub 仓库
  • 构建产物发布到 GitHub releases
  • 构建产物经过代码签名 (仅限 macOS)

在此阶段,我们假设你已经将所有代码 推送到一个公开的 GitHub 仓库。

:::info 其他更新服务

如果你使用的是其他仓库托管服务(例如 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 中:

```sh npm2yarn npm install --save-dev @electron-forge/publisher-github

#### 在 Forge 中配置 publisher {#configuring-the-publisher-in-forge}

安装完成后,你需要在 Forge
配置中设置它。完整选项列表记录在 Forge 的
[`PublisherGitHubConfig`][] API 文档中。

```js title='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
      }
    }
  ]
}

:::tip 在发布前创建草稿 release

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

:::

设置身份验证令牌

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

运行 publish 命令

将 Forge 的 publish command 添加到你的 npm scripts 中。

```json {6} title='package.json' //... "scripts": { "start": "electron-forge start", "package": "electron-forge package", "make": "electron-forge make", "publish": "electron-forge publish" }, //...

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

```sh npm2yarn
npm run publish

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

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

:::tip 为 release 打标签

可选地,你还可以在 Git 中为你的 release 打标签,以便你的 release 与代码历史中标记的某个点相关联。npm 附带了一个方便的 npm version 命令,可以帮你处理版本递增和打标签。

:::

附加内容:在 GitHub Actions 中发布

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

一种解决方案是通过自动化工作流发布你的应用, 例如 GitHub Actions,它可以在云中的 Ubuntu、macOS 和 Windows 上运行任务。这正是 Electron Fiddle 采用的方法。 你可以参考 Fiddle 的 Build and Release pipeline 和 Forge configuration 了解更多详情。

为更新器代码添加埋点

现在,我们已经通过 GitHub releases 拥有了一个可用的 release 系统,我们需要告诉我们的 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。

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

```sh npm2yarn npm install update-electron-app

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

```js title='main.js' @ts-nocheck
require('update-electron-app')()

仅此而已!一旦你的应用完成打包,它就会针对你发布的每个新 GitHub 发布版本自动更新自身。

总结

在本教程中,我们配置了 Electron Forge 的 GitHub Publisher,将你的应用可分发文件上传到 GitHub 发布版本。由于可分发文件并不总能跨平台生成,如果你无法访问相应机器,我们建议将构建和发布流程配置在持续集成流水线中。

Electron 应用可以通过将 autoUpdater 模块指向更新服务器源来实现自动更新。 update.electronjs.org 是 Electron 为发布在 GitHub 发布版本上的开源应用提供的免费更新服务器。 配置你的 Electron 应用使用该服务,只需安装并导入 update-electron-app 模块即可。

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

:::info 🌟 完成了!

从这里开始,你已正式完成了我们的 Electron 教程。欢迎继续浏览其余文档,祝你开发愉快!

:::

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron