Electron 版本控制
详细了解我们的版本控制策略和实现。
从 2.0.0 版本开始,Electron 遵循 SemVer 规范。以下命令将安装 Electron 的最新稳定版本。
- npm
- Yarn
npm install --save-dev electron
yarn add --dev electron
要将现有项目更新为使用最新稳定版本
- npm
- Yarn
npm install --save-dev electron@latest
yarn add --dev electron@latest
版本控制方案
与我们 1.x 策略相比,下面列出了几项重大更改。每项更改旨在满足开发者/维护者和应用程序开发者的需求和优先级。
我们将详细介绍 git 分支的工作方式、npm 标签的工作方式、开发者应该看到什么以及如何向后移植更改。
SemVer
下表明确列出了更改类型及其相应的 SemVer 类别(例如,Major、Minor、Patch)。
| 主版本号递增 | 次要版本号递增 | 补丁版本号递增 |
|---|---|---|
| Electron 破坏性 API 更改 | Electron 非破坏性 API 更改 | Electron 错误修复 |
| Node.js 主版本更新 | Node.js 次要版本更新 | Node.js 补丁版本更新 |
| Chromium 版本更新 | 与修复相关的 Chromium 补丁 |
有关更多信息,请参阅 Semantic Versioning 2.0.0 规范。
请注意,大多数 Chromium 更新将被视为破坏性更改。可以向后移植的修复很可能被挑选为补丁。
稳定分支
稳定分支是与 main 并行的分支,仅接受与安全或稳定性相关的提交。这些分支永远不会合并回 main。

自 Electron 8 起,稳定分支始终是**主**版本线,命名遵循以下模板:$MAJOR-x-y,例如 8-x-y。在此之前,我们使用**次要**版本线并命名为 $MAJOR-$MINOR-x,例如 2-0-x。
我们允许多个稳定分支同时存在,每个受支持版本一个。有关支持哪些版本,请参阅我们的 Electron 发行版 文档。

Electron 项目将不再支持旧版本线,但其他团队可以接管并自行向后移植稳定性和安全修复。我们不鼓励这样做,但认识到这可以为许多应用程序开发者提供便利。
Beta 版本和错误修复
开发者希望知道哪些版本是安全的。即使是看似无害的功能也可能在复杂应用程序中引入回归。同时,锁定固定版本很危险,因为您会忽略自您的版本发布以来可能出现的安全补丁和错误修复。我们的目标是允许在 package.json 中使用以下标准的 semver 范围:
- 使用
~2.0.0仅接受与稳定性或安全性相关的修复到您的2.0.0版本。 - 使用
^2.0.0来包含非破坏性的相对稳定的功能性工作,以及安全性和错误修复。
第二点的重要性在于,使用 ^ 的应用程序仍应能够期望获得合理的稳定性。为了实现这一点,SemVer 允许使用预发布标识符来指示特定版本尚未安全或稳定。
无论您选择哪种方式,您都需要定期在 package.json 中更新版本,因为破坏性更改是 Chromium 的现实。这需要。
流程如下:
- 所有新的主版本和次版本线都以 Beta 系列开始,用 SemVer 预发布标签
beta.N表示,例如2.0.0-beta.1。第一个 Beta 版本发布后,后续的 Beta 版本必须满足以下所有条件:- 更改向后兼容 API(允许弃用)
- 满足我们稳定性时间表的风险必须很低。
- 如果 Beta 版本发布后需要进行更改,则会应用这些更改,并递增预发布标签,例如
2.0.0-beta.2。 - 如果某个 Beta 版本被普遍认为稳定,它将被重新发布为稳定版本,仅更改版本信息。例如
2.0.0。第一个稳定版本发布后,所有更改都必须是向后兼容的错误修复或安全修复。 - 如果稳定版本发布后需要进行将来的错误修复或安全补丁,则会应用这些更改,并递增补丁版本,例如
2.0.1。
具体来说,上述意思如下:
- 在 Beta 周期开始的第 3 周之前允许非破坏性 API 更改是可以的,即使这些更改有可能导致中等程度的副作用。
- 在 Beta 周期的大部分时间里,允许引入功能标志更改,这些更改不会改变现有的代码路径。用户可以在其应用程序中明确启用这些标志。
- 除非有非常充分的理由,否则在 Beta 周期结束第 3 周之后引入任何类型的功能是不被允许的。
对于每次主版本和次版本更新,您应该会看到类似以下的结构:
2.0.0-beta.1
2.0.0-beta.2
2.0.0-beta.3
2.0.0
2.0.1
2.0.2
图片中的生命周期示例
- 创建一个包含最新功能集的新发布分支。它将发布为
2.0.0-beta.1。
- 一个 bug 修复被合并到 master,并可以向后移植到发布分支。应用修复程序,并发布新的 Beta 版本为
2.0.0-beta.2。
- Beta 版本被认为普遍稳定,并再次以非 Beta 形式发布,版本号为
2.0.0。
- 稍后,发现了一个零日漏洞并将其修复应用于 master。我们将其向后移植到
2-0-x线并发布2.0.1。
各种 SemVer 范围如何接收新发布的示例

向后移植请求流程
所有受支持的发布线将接受外部拉取请求,将先前合并到 main 的修复程序向后移植,尽管对于某些较旧的支持线,这可能视具体情况而定。所有关于发布线向后移植的争议性决定将由 发布工作组在其每周会议上作为议程项目解决,会议时间为向后移植 PR 提交的当周。
功能标志
功能标志是 Chromium 中的一种常见做法,并且在 Web 开发生态系统中已经确立。在 Electron 的上下文中,功能标志或**软分支**必须具备以下特性:
- 它可以在运行时或构建时启用/禁用;我们不支持请求范围的功能标志的概念。
- 它完全分隔了新旧代码路径;重构旧代码以支持新功能违反了功能标志合同。
- 功能标志在功能发布后最终会被删除。
语义提交
所有拉取请求必须遵守 Conventional Commits 规范,该规范可总结如下:
- 会导致 SemVer major 升级的提交必须在正文中以
BREAKING CHANGE:开头。 - 会导致 SemVer minor 升级的提交必须以
feat:开头。 - 会导致 SemVer patch 升级的提交必须以
fix:开头。
electron/electron 仓库还强制执行 squash 合并,因此您只需要确保您的拉取请求具有正确的标题前缀。
版本控制的 main 分支
main分支的package.json中将始终包含下一个主版本X.0.0-nightly.DATE。- 发布分支永远不会合并回
main。 - 发布分支确实在其
package.json中包含正确的版本。 - 一旦为主版本创建了发布分支,
main必须更新到下一个主版本(即main始终以下一个理论发布分支的版本进行标识)。
历史版本控制(Electron 1.X)
Electron 版本< 2.0 不符合 SemVer 规范:主版本对应终端用户 API 更改,次版本对应 Chromium 主版本发布,补丁版本对应新功能和错误修复。虽然方便开发者合并功能,但它给客户端应用程序开发者带来了问题。像 Slack、Teams、VS Code 和 GitHub Desktop 这样的主要应用程序的 QA 测试周期可能很长,并且稳定性是高度期望的结果。在尝试吸收错误修复的同时采用新功能存在很高的风险。
这是 1.x 策略的一个示例

使用 1.8.1 开发的应用程序无法采用 1.8.3 的错误修复,除非吸收了 1.8.2 的功能,或者通过向后移植修复并维护新的发布线。