Node.js 改成一年一版:26 是旧模型最后一班车,27 起所有版本都进 LTS
来源:
发布模型:一年一版,取消奇偶区分
截至 2026 年 10 月,Node.js 的发布规则调整为:
- 每年 4 月发布一个大版本,10 月晋升 LTS。
- 每个版本都会成为 LTS,不再有奇数版/偶数版的区别,Node.js 27 同样会进入 LTS。
- 新增 Alpha 通道用于早期测试,允许合入 semver-major 变更;alpha 版本号遵循 semver 预发布格式,例如
27.0.0-alpha.1。 - 版本号与首次 Current 发布所在的日历年对齐:2027 年是
27.0.0,2028 年是28.0.0。 - 减少 Releaser 的发布负担。
新发布周期时间表
| 阶段 | 时长 | 说明 |
|---|---|---|
| Alpha | 6 个月(Oct–Mar) | 早期测试,允许 semver-major |
| Current | 6 个月(Apr–Oct) | 稳定化 |
| LTS | 30 个月 | 长期支持,含安全修复 |
| EOL | Infinity | — |
从首次 Current 发布到 End of Life 的总支持时长为 36 个月。
Node.js 26:旧模型下的最后一条发布线
Node.js 26 沿用现有时间表,是当前模型下的最后一条发布线:
26.0.0:2026 年 4 月- 进入 LTS:2026 年 10 月
- Maintenance:2027 年 10 月
- End of Life:2029 年 4 月
Node.js 27:新模型下的第一个版本
- Alpha 开始:2026 年 10 月
27.0.0:2027 年 4 月- 进入 LTS:2027 年 10 月
- End of Life:2030 年 4 月
保持不变的部分
LTS 时长仍为 30 个月,迁移窗口保留,LTS 版本之间的重叠期保留,质量标准不变,时间表可预期。V8 采用节奏也未变:Node.js 最新版本仍会包含最多约 6 个月前版本的 V8。
Node.js 26.0.0 (Current) 发布要点
Temporal 默认开启
Temporal API 默认启用,作为传统 Date 对象的现代日期/时间替代方案。使用旧 Date 的代码可以继续运行,但新代码不必再依赖第三方日期库。
V8 与 Undici
- V8 引擎更新至
14.6.202.33(Chromium 146),包含[Weak]Map.prototype.getOrInsert()/getOrInsertComputed()、Iterator.concat()。 - Undici 更新至
8.0.2。
弃用与移除
http.Server.prototype.writeHeader()已完全移除,改用writeHead()。- 以下遗留内部模块已完全移除:
_stream_wrap、_stream_readable、_stream_writable、_stream_duplex、_stream_transform、_stream_passthrough。
升级排期与改动清单
排期上,26 的 LTS 在 2026 年 10 月到位,27 的 alpha 同期开始,也就是说 26 进入 LTS 与 27 进入 alpha 会在同一时间窗口发生;26 的 Maintenance 在 2027 年 10 月,而 27 恰好在同月进入 LTS,重叠期足以做迁移。之后每年 4 月一个新 major、10 月转 LTS,节奏固定,按年份对齐版本号即可推算。
代码改动上,先做一轮检索:
# 查找直接调用 writeHeader 的位置
grep -rn "writeHeader" ./src
# 查找依赖遗留 _stream_* 内部模块的代码与依赖
grep -rn "_stream_\(wrap\|readable\|writable\|duplex\|transform\|passthrough\)" ./src node_modules
writeHeader() 换成 writeHead(),直接引用 _stream_* 内部模块的地方需要改走公开的 stream API。Temporal 虽然默认开启,但迁移可以分批进行,不必和上面两处移除项绑在同一次发布里。