Node.js 26 转正成 LTS「Lithium」:只改了元数据的版本,却是很多人接下来三年的地基
26.13.0 把 26.x 送进长期支持,支持到 2029 年 4 月;同一天 24.x 还出了 24.22.2,两天后又冒出 27.0.0-alpha。这一版几乎没有代码改动,但值得认真读一遍。
10 月 28 日晚上我在升级一台跑旧服务的机器,顺手刷了一眼 Node.js 的 release 列表,看到 26.13.0 'Lithium' (LTS) 的时候愣了一下:不是因为它大,而是因为它小。这一版的 Notable Changes 只有三段,第一段讲它转 LTS 了,第二段讲「除了元数据之外没有别的改动」,第三段讲 libatomic。
一个「什么都没改」的版本,反而是我今年最想写下来的一个版本。
它改的那点东西,只有一行能被程序看见
process.release 里的字段从 current 形态变成 LTS 形态,codename 定成 Lithium,维护窗口到 2029 年 4 月底。除此之外,26.13.0 与 26.12.1 的代码完全一致。

这件事的仪式感大于技术含量,但它真实的含义是:从现在起,26.x 这条线只会收 bug 修复和安全补丁,不会再有新特性。 对一个要跑三年的服务来说,这是最好的消息 —— 你终于可以不去读每次发版的 changelog 了。
同一天还发了 24.22.2 'Krypton'。两条 LTS 线并行,是 Node 一直以来的节奏;再往后两天,27.0.0-alpha.0.0.0 也冒出来了,说明下一轮主线已经开始跑。这个时间点发布局非常典型:老线加固、新线试错,中间那条什么也不做,只在那里稳住。
「没改代码」为什么是好消息
我做运维这些年,对「功能版本」的期待值一直是负的。新特性意味着新分支、新默认值、新的边界情况,而我管的机器上最贵的东西不是性能,是可预测性。

一个只改元数据的版本,等价于官方替你按下了「冻结」按钮。它不承诺更快,但它承诺不变。这种承诺在 LTS 语言里很少被认真说出口,所以我在迁移文档里会把这次的 tag 单独记一行:26.13.0 是「26 线的起点」,而不是「26.12.1 的又一个补丁」。
libatomic 那一段,是给老机器的提示
第三段话容易被跳过:从 Node 25 开始,Linux 官方二进制链接了 libatomic,某些发行版需要单独安装。

我在一台 Debian 12 的最小化镜像里踩过类似的坑:不是编译错误,而是运行到某个原子操作用到的地方才报符号缺失,报错信息跟 Node 一点关系都没有。如果你的部署镜像精修过(Alpine、distroless、最小化 Debian),升级前先确认 libatomic1 在不在;这一步花的三十秒,能省掉一次半夜的排查。

现在该不该动
如果你在生产上跑 26.12.x,我的建议是下个维护窗口升到 26.13.0:改动面几乎为零,收益是进入官方支持的正式窗口。如果还在 24.x 或 22.x,别急,24.x 也刚发了 24.22.2,它同样在支持期内;真正该动的是那些还挂在 EOL 线上的机器。
还有一件事值得顺手做:把 CI 里的 node-version 从 26 改成 26.13。浮动大版本听起来省事,但它会在你没准备好的那天替你升一个小版本 —— 而 LTS 的第一版,恰好是最值得钉住的那个点。
另外提醒一句:Node 的 11 月安全版本定在 11 月 11 日,三条线都是 HIGH,细节我写在那篇预告里了。升级这件事,可以等下周一起做。

评论
…