跳转至

Electron 版本控制

深入解析我们的版本控制策略与实现。

自 2.0.0 版本起,Electron 遵循 语义化版本 规范。以下命令将安装最新的 Electron 稳定版构建:

```sh npm2yarn npm install --save-dev electron

要将现有项目更新为使用最新稳定版:

```sh npm2yarn
npm install --save-dev electron@latest

语义化版本

下表明确列出了不同类型的变更与其对应的语义化版本类别(例如主版本、次版本、补丁版本)。

主版本号递增 次版本号递增 补丁版本号递增
Electron 破坏性 API 变更 Electron 非破坏性 API 变更 Electron 错误修复
Node.js 主版本更新 Node.js 次版本更新 Node.js 补丁版本更新
Chromium 版本更新 与修复相关的 Chromium 补丁

更多信息请参阅 语义化版本 2.0.0 规范。

请注意,大多数 Chromium 更新都将被视为破坏性变更。可以向后移植的修复通常会被 cherry-pick 为补丁。

稳定化分支

稳定化分支是与 main 并行运行的分支,只接受与安全或稳定性相关的 cherry-pick 提交。这些分支永远不会合并回 main。

gitGraph
    commit
    commit
    branch N-x-y
    checkout main
    commit id:"fix-1"
    checkout N-x-y
    cherry-pick id:"fix-1"
    checkout main
    commit id:"fix-2"
    checkout N-x-y
    cherry-pick id:"fix-2"
    checkout main
    commit
    commit

自 Electron 8 起,稳定化分支始终是 主 版本线,并按照以下模板命名:$MAJOR-x-y,例如 8-x-y。(在此之前,我们使用 次 版本线,并将其命名为 $MAJOR-$MINOR-x,例如 2-0-x。)

我们允许同时存在多个稳定化分支,每个受支持的版本对应一个。

[!TIP] 如需了解支持哪些版本,请参阅我们的 Electron 版本发布 文档。

gitGraph
    commit
    branch "41-x-y"
    checkout main
    commit
    commit
    commit id:"fix-a"
    checkout "41-x-y"
    cherry-pick id:"fix-a"
    checkout main
    commit
    commit id:"fix-b"
    checkout "41-x-y"
    cherry-pick id:"fix-b"
    checkout main
    commit
    branch "42-x-y"
    checkout main
    commit
    commit id:"fix-c"
    checkout "41-x-y"
    cherry-pick id:"fix-c"
    checkout "42-x-y"
    cherry-pick id:"fix-c"
    checkout main
    commit
    commit id:"fix-d"
    checkout "41-x-y"
    cherry-pick id:"fix-d"
    checkout "42-x-y"
    cherry-pick id:"fix-d"
    checkout main
    commit

较旧的版本线将不再受到 Electron 项目的支持。

发布周期

Electron 遵循 8 周的定期发布周期,其关键里程碑与 Chromium 发布周期中的对应日期一致。

gantt
    title Electron release cycle
    dateFormat  YYYY-MM-DD
    axisFormat  Week %W
    todayMarker off
    section v41
    Alpha phase                    :a1, 2026-01-19, 4w
    M146 enters Chrome beta        :milestone, bm1, after a1, 0d
    Beta phase                     :b1, after a1, 4w
    M146 enters Chrome stable      :milestone, s1, after b1, 0d
    Supported until v44 release    :active, after b1, 12w
    section v42
    Alpha phase                    :a2, after b1, 4w
    M148 enters Chrome beta        :milestone, bm2, after a2, 0d
    Beta phase                     :b2, after a2, 4w
    M148 enters Chrome stable      :milestone, s2, after b2, 0d
    Supported until v45 release    :active, after b2, 4w

示例

当 Electron 41 发布稳定版时,Electron 42 的发布线从 main 分支出来。其首个 alpha 版本将包含 main 上的所有更改:

gitGraph
    commit
    commit
    commit
    branch "42-x-y"
    checkout "42-x-y"
    commit tag:"v42.0.0-alpha.1"

一个可以向后移植到发布分支的错误修复进入 main。补丁被应用后,将会发布在下一个 v42.0.0-alpha.2 版本中。

gitGraph
    commit
    commit
    commit
    branch "42-x-y"
    checkout "42-x-y"
    commit id:"42.0.0-alpha.1" tag:"v42.0.0-alpha.1"
    checkout "main"
    commit
    commit id:"fix-1"
    checkout "42-x-y"
    cherry-pick id:"fix-1" tag:"v42.0.0-alpha.2"

支撑 Electron 42 的 Chromium 版本进入 Chrome 的 Beta 渠道。alpha 线被提升为 beta。

gitGraph
    commit
    commit
    commit
    branch "42-x-y"
    checkout "42-x-y"
    commit id:"42.0.0-alpha.1" tag:"v42.0.0-alpha.1"
    checkout "main"
    commit
    commit id:"fix-1"
    checkout "42-x-y"
    cherry-pick id:"fix-1" tag:"v42.0.0-alpha.2"
    checkout "main"
    commit
    commit
    commit id:"fix-2"
    checkout "42-x-y"
    cherry-pick id:"fix-2" tag:"v42.0.0-beta.1"

Beta 版本继续每周发布,直到 Electron 42 升级为稳定版,然后同样的周期将以 43-x-y 重新开始。之后,一个零日漏洞被公开,修复被应用到 main。我们将修复向后移植到 42-x-y 线,并发布 42.0.1。

gitGraph
    commit
    commit
    commit
    branch "42-x-y"
    checkout "42-x-y"
    commit id:"42.0.0-alpha.1" tag:"v42.0.0-alpha.1"
    checkout "main"
    commit
    commit id:"fix-1"
    checkout "42-x-y"
    cherry-pick id:"fix-1" tag:"v42.0.0-alpha.2"
    checkout "main"
    commit
    commit
    commit id:"fix-2"
    checkout "42-x-y"
    cherry-pick id:"fix-2" tag:"v42.0.0-beta.1"
    checkout "main"
    commit id:"fix-3"
    checkout "42-x-y"
    cherry-pick id:"fix-3" tag:"v42.0.0"
    checkout "main"
    branch "43-x-y"
    checkout "43-x-y"
    commit id:"43.0.0-alpha.1" tag:"v43.0.0-alpha.1"
    checkout "main"
    commit id:"security-fix"
    checkout "42-x-y"
    cherry-pick id:"security-fix" tag:"v42.0.1"
    checkout "43-x-y"
    cherry-pick id:"security-fix" tag:"v43.0.0-alpha.2"

回退请求流程

所有受支持的发布线都会接受外部拉取请求,以回退先前已合并到 main 的修复,但对于某些较旧的受支持线,这可能逐案处理。所有围绕发布线回退的有争议的决定,都将由 Releases Working Group 作为其周会议程事项,在回退 PR 提出当周的周会上解决。

功能标志

功能标志是 Chromium 中的常见做法,并且在 Web 开发生态系统中已经成熟。在 Electron 的上下文中,功能标志或软分支必须具有以下属性:

  • 它在运行时或构建时启用/禁用;我们不支持请求作用域的功能标志这一概念
  • 它完全隔离新旧代码路径;重构旧代码以支持新功能会_违反_功能标志契约
  • 功能标志最终会在功能发布后移除

语义化提交

所有拉取请求都必须遵循 Conventional Commits 规范,该规范可总结如下:

  • 会导致 SemVer major 版本提升的提交,其正文必须以 BREAKING CHANGE: 开头。
  • 会导致 SemVer minor 版本提升的提交必须以 feat: 开头。
  • 会导致 SemVer patch 版本提升的提交必须以 fix: 开头。

electron/electron 仓库还强制使用 squash 合并,因此你只需确保拉取请求具有正确的标题前缀。

带版本号的 main 分支

  • main 分支始终对应当前预发布线之上的主版本。
  • main 的不稳定每日构建版本通过 npm 上的 electron-nightly 包发布。
  • 发布分支永远不会合并回 main。
  • 所有 package.json 值固定为 0.0.0-development。

历史版本控制(Electron 1.X)

Electron 版本 < 2.0 不符合 SemVer 规范:主版本对应面向最终用户的 API 变更,次版本对应 Chromium 主版本发布,修订版本对应新功能和缺陷修复。虽然这对合并功能的开发者很方便,但会给面向客户端应用的开发者带来问题。像 Slack、Teams、VS Code 和 GitHub Desktop 这样的大型应用的 QA 测试周期可能很长,而稳定性是高度期望的结果。在尝试吸收缺陷修复的同时采用新功能存在高风险。

以下是 1.x 策略的一个示例:

---
config:
  gitGraph:
    mainBranchName: 'master'
---
gitGraph
    commit
    branch "bugfix-1"
    checkout "bugfix-1"
    commit
    checkout master
    merge "bugfix-1" tag:"1.8.1"
    branch "feature"
    checkout "feature"
    commit
    checkout master
    merge "feature" tag:"1.8.2"
    branch "bugfix-2"
    checkout "bugfix-2"
    commit
    checkout master
    merge "bugfix-2" tag:"1.8.3"

使用 1.8.1 开发的应用无法在不吸收 1.8.2 功能的情况下获取 1.8.3 缺陷修复,除非通过回退该修复并维护一个新的发布线。

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