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
的功能,或者通过向后移植修复并维护新的发布线。