编程 Node.js 27 起一年一版:奇偶版本区分取消,所有版本都进 LTS

2026-09-26 00:04:02

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 复杂度都会上升。减少并发发布线后,可以集中支持人们实际使用的版本。

新发布阶段

阶段时长时间说明
Alpha6 个月10 月到次年 3 月早期测试,允许 semver-major
Current6 个月4 月到 10 月稳定化
LTS30 个月—长期支持,包含安全修复
EOLInfinity—项目不再提供任何支持

从首次 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.02026 年 4 月
进入 LTS2026 年 10 月
Maintenance2027 年 10 月
EOL2029 年 4 月

Node.js 26 遵循现有计划。这是当前模型下最后一个发布线。

Node.js 27(新模型)

事件时间
Alpha 开始2026 年 10 月
27.0.02027 年 4 月
进入 LTS2027 年 10 月
EOL2030 年 4 月

Node.js 27 是新计划下第一个发布线。

未来 10 年

版本AlphaCurrentLTSEOL
27.x2026-102027-042027-102030-04
28.x2027-102028-042028-102031-04
29.x2028-102029-042029-102032-04
30.x2029-102030-042030-102033-04
31.x2030-102031-042031-102034-04
32.x2031-102032-042032-102035-04
33.x2032-102033-042033-102036-04
34.x2033-102034-042034-102037-04
35.x2034-102035-042035-102038-04
36.x2035-102036-042036-102039-04

这个时间表不是最终版,可能修改。最新支持声明以 schedule.json 为准。

现有发布状态

来自 nodejs.org release list:

版本状态备注
v26Current首次发布 2026-05-05
v24Krypton LTSActive LTS 至 2026-10-20,EOL 2028-04-30
v22Jod LTSMaintenance,EOL 2027-04-30
v20IronEOL 2026-03-24
v18EOL—
v25EOL2025 年 10 月发布

Release schedule(nodejs/Release README):

发布线状态codenameinitialActive LTS StartMaintenance StartEOL
22.xMaintenance LTSJod2024-04-242024-10-292025-10-212027-04-30
24.xActive LTSKrypton2025-05-062025-10-282026-10-202028-04-30
26.xCurrent—2026-05-052026-10-282027-10-202029-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。

推荐文章

程序员茄子在线接单