Node.js 27 起一年一版:奇偶版本区分取消,所有版本都进 LTS
来自 NJRWG / Node.js Releasers。从 27.x 开始,Node.js 将从每年两个大版本改为每年一个。完整讨论和背景见 nodejs/Release#1113。
TL;DR: 如果你本来就只升级 LTS 版本,除了版本号变化,实际变化不大。LTS 支持窗口基本不变,而且以后每个版本都会成为 LTS。库作者:尽早把 Alpha 版本接入 CI;如果只在 LTS 上测试,就无法在 bug 影响用户前报告。
这次改了什么
从 2026 年 10 月开始:
- 每年一个大版本(4 月),10 月晋升 LTS。
- 所有版本都成为 LTS。不再有奇数/偶数区分,Node.js 27 会成为 LTS。
- 新增 Alpha 通道,用于早期测试,允许 semver-major 变更。
- Alpha 版本号遵循 semver prerelease 格式,例如
27.0.0-alpha.1。 - 版本号与首次 Current 发布的日历年对齐:
27.0.0在 2027 年,28.0.0在 2028 年。 - 减少 Releasers 负担。
为什么改
当前发布计划已经 10 年。它是在 io.js 合并时期创建的,用来平衡增长中的生态需求。当时有贡献者说,这是 “an educated guess of what enterprises would need.”
十年数据表明人们实际怎么用 Node.js:
- 奇数版本采用率极低。大多数用户等 LTS。
- 奇数/偶数区分让新人困惑。
- 很多组织完全跳过奇数版本,只升级到 LTS。
企业也需要可预测性。新计划设计得定义明确,团队可以据此规划升级和分配资源。
志愿者可持续性
Node.js 主要由志愿者维护。虽然部分贡献者有赞助,但大部分工作(review PR、处理安全问题、发版、backport 修复)由人们在业余时间完成。
在四条或五条活跃发布线之间管理安全发布已经难以持续。每增加一条线,backport 复杂度都会上升。减少并发发布线后,可以集中支持人们实际使用的版本。
新发布阶段
| 阶段 | 时长 | 时间 | 说明 |
|---|---|---|---|
| Alpha | 6 个月 | 10 月到次年 3 月 | 早期测试,允许 semver-major |
| Current | 6 个月 | 4 月到 10 月 | 稳定化 |
| LTS | 30 个月 | — | 长期支持,包含安全修复 |
| EOL | Infinity | — | 项目不再提供任何支持 |
从首次 Current 发布到 EOL,总支持时长为 36 个月。
新旧对照
| 项目 | 旧模型 | 新模型 |
|---|---|---|
| 大版本频率 | 每年两个 | 每年一个(4 月),10 月晋升 LTS |
| LTS 判定 | 偶数版本 | 所有版本都会成为 LTS |
| 奇偶区分 | 奇数版本用于 Current,采用率低 | 作废 |
| Alpha 通道 | 无 | 有,允许 semver-major,签名、打 tag、经 CITGM 测试 |
| 版本号 | 顺序递增 | 与初始 Current 发布的日历年对齐 |
| LTS 支持 | 30 个月 | 30 个月(不变) |
| 迁移窗口 | 保留 | 保留 |
| 质量流程 | 同一套测试、CITGM、安全流程 | 不变 |
对 CI 和库作者的影响
库作者应尽早把 Alpha 版本接入 CI。只测 LTS 的话,你无法在破坏性变更影响用户前报告问题。
Alpha 面向库作者和 CI pipeline,用来测试与即将到来的破坏性变更的兼容性。不面向生产使用。
只升级 LTS 的用户,除版本号变化外影响不大;LTS 支持窗口类似,并且以后每个版本都会是 LTS。
Alpha 通道细节
Alpha 通道填补了奇数版本曾经承担的早期测试角色,但有一个关键区别:Alpha 期间允许 semver-major 变更。Alpha 版本会签名、打 tag,并通过 CITGM 测试。CITGM(Canary in the Goldmine)是项目维护的工具,在即将发布的 Node.js 上运行主要开源包的测试套件,用于检测生态破坏,并在发布前通知包作者。
它不同于 Nightly builds。Nightly 仍然是从 main 自动构建、未测试的版本。Alpha 版本可能不包含 main 的所有变更。变更不进入 Alpha 的两种情况:
- PR review 时,reviewer 添加标签要求该变更不要 backport。例如某个 API 在 Alpha 版本中运行时废弃,那么实际移除该 API 的变更不应进入下一个发布线。
- Alpha 发布准备时,releaser 最终决定哪些 commit 进入发布。例如依赖更新包含重大 bug。
预期:
- 版本签名并打 tag(不同于 nightly)。
- API 可能在版本之间变化。
- 发布节奏灵活;Release Team 会根据变更量和项目需求决定 Alpha 发布的时间和频率。
原因:为破坏性变更提供早期反馈,并带有 Nightly 缺乏的质量门禁;也让 V8 更新更早进入周期。
Alpha 版本中发布 semver-major commit 的规则将由 Release Team 定义,并记录在 Release 仓库。
没有变
- LTS 时长基本不变(30 个月)。
- 迁移窗口保留。LTS 版本之间仍有重叠。
- 质量标准不变。同样测试、同样 CITGM、同样安全流程。
- 可预测时间表。4 月发布,10 月晋升 LTS。
- V8 采用周期。Node.js 最新版本仍会包含至多约 6 个月旧的 V8。
时间线
Node.js 26(现有模型)
| 事件 | 时间 |
|---|---|
| 26.0.0 | 2026 年 4 月 |
| 进入 LTS | 2026 年 10 月 |
| Maintenance | 2027 年 10 月 |
| EOL | 2029 年 4 月 |
Node.js 26 遵循现有计划。这是当前模型下最后一个发布线。
Node.js 27(新模型)
| 事件 | 时间 |
|---|---|
| Alpha 开始 | 2026 年 10 月 |
| 27.0.0 | 2027 年 4 月 |
| 进入 LTS | 2027 年 10 月 |
| EOL | 2030 年 4 月 |
Node.js 27 是新计划下第一个发布线。
未来 10 年
| 版本 | Alpha | Current | LTS | EOL |
|---|---|---|---|---|
| 27.x | 2026-10 | 2027-04 | 2027-10 | 2030-04 |
| 28.x | 2027-10 | 2028-04 | 2028-10 | 2031-04 |
| 29.x | 2028-10 | 2029-04 | 2029-10 | 2032-04 |
| 30.x | 2029-10 | 2030-04 | 2030-10 | 2033-04 |
| 31.x | 2030-10 | 2031-04 | 2031-10 | 2034-04 |
| 32.x | 2031-10 | 2032-04 | 2032-10 | 2035-04 |
| 33.x | 2032-10 | 2033-04 | 2033-10 | 2036-04 |
| 34.x | 2033-10 | 2034-04 | 2034-10 | 2037-04 |
| 35.x | 2034-10 | 2035-04 | 2035-10 | 2038-04 |
| 36.x | 2035-10 | 2036-04 | 2036-10 | 2039-04 |
这个时间表不是最终版,可能修改。最新支持声明以 schedule.json 为准。
现有发布状态
来自 nodejs.org release list:
| 版本 | 状态 | 备注 |
|---|---|---|
| v26 | Current | 首次发布 2026-05-05 |
| v24 | Krypton LTS | Active LTS 至 2026-10-20,EOL 2028-04-30 |
| v22 | Jod LTS | Maintenance,EOL 2027-04-30 |
| v20 | Iron | EOL 2026-03-24 |
| v18 | EOL | — |
| v25 | EOL | 2025 年 10 月发布 |
Release schedule(nodejs/Release README):
| 发布线 | 状态 | codename | initial | Active LTS Start | Maintenance Start | EOL |
|---|---|---|---|---|---|---|
| 22.x | Maintenance LTS | Jod | 2024-04-24 | 2024-10-29 | 2025-10-21 | 2027-04-30 |
| 24.x | Active LTS | Krypton | 2025-05-06 | 2025-10-28 | 2026-10-20 | 2028-04-30 |
| 26.x | Current | — | 2026-05-05 | 2026-10-28 | 2027-10-20 | 2029-04-30 |
2026 年 10 月是切换节点:v24 从 2026-10-20 进入 Maintenance,v26 从 2026-10-28 进入 Active LTS。v22 处于 Maintenance,v24 是 Active LTS,v26 是 Current。
每个偶数(LTS)大版本从进入 LTS 覆盖起主动维护 12 个月,然后转入维护模式 18 个月。(Node.js 12 之前,主动期是 18 个月,维护期 12 个月。)
讨论与链接
这次变更来自 GitHub issues、Release Working Group 会议、Collaboration Summit Chesapeake 2025 的讨论。问题见 nodejs/Release#1113。