有人机器上还钉着 24,有人 CI 镜像一刷新就飘到 26。版本选择页或发布列表里,26.x 的状态已经写成 LTS,代号 Lithium。两边都会问同一句:生产现在跟哪条线更合适。下面只对照 Node 官网发布说明和 Releases 列表,不编造谁更快、谁更省内存。
26.13.0 宣布进 LTS
Node.js 26.13.0 (LTS) 写明:这次发布标志着 26.x 进入 Long Term Support,代号 Lithium,预期会持续收到更新到 2029 年 4 月底。相对 26.12.1,主要是更新 LTS 元数据(例如 process.release),没有再塞其它功能性变更。
Node.js Releases 列表里也能对上:v26 代号 Lithium,状态 LTS。同表里 v24 代号 Krypton,状态同样是 LTS,并不是「26 一进 LTS,24 立刻停更」。表上还能看到 v22(Jod)仍标着 LTS,v25 已经 EOL——奇数版本短命、偶数进 LTS 的旧节奏,在 26 这一代仍然适用。从 27 起官网另有年度节奏的说明,和生产「现在跟 24 还是 26」是另一条线。
24 还在维护
24.x 进入 LTS 时的说明见 24.11.0:代号 Krypton,更新预期到 2028 年 4 月底。之后这条线仍在发 LTS 更新,例如 24.22.2 仍按 LTS 发布。生产若依赖已验证、短期不想动主运行时,继续留在 24 并跟官方补丁,和「必须立刻跳到最新 LTS」不是同一回事。
怎么选,更常见的约束是:
- 依赖和原生模块有没有声明支持 26。锁文件里一堆还停在「最高测到 24」的包,切过去成本在兼容性,不在下载包名。
- 团队镜像、发行版软件源、Paas 运行时有没有已经提供 26 的安全基线镜像。
- 支持窗口:26 写到 2029-04,24 写到 2028-04。窗口更长不等于马上就该迁。但若你们计划两年内不再大升级运行时,窗口本身可以进对比表。
- 应用代码有没有踩过 25 → 26 Current 阶段已经合入的破坏性变更。26.13.0 相对 26.12.1 几乎只动元数据,可从 24 直接跨到 26,中间隔着整段 Current 时期的行为变化,要用你们自己的测试矩阵盖住,不能只看这一条 LTS 宣布。
从更早的 LTS 升上来时注意 libatomic
26.13.0 的 Notable Changes 里有一句专门写给跨大版本升级的人:自 Node.js 25 起,官方 Linux 二进制会链 libatomic,从更早的 LTS(例如 24、22)升上来时,视发行版而定,可能需要单独安装。缺库时常见表现是装完官方包或解压二进制后无法启动,报找不到相关共享库。Debian/Ubuntu 一类环境往往对应 libatomic1 这类包名,以你们发行版的包管理器为准。
容器镜像里如果自己打了精简 rootfs,升 26 时把这一层依赖写进 Dockerfile,比在生产节点上现装要可控。用操作系统自带的 Node 包、而不是 nodejs.org 官方二进制时,链接方式可能不同,仍以发行版文档为准。官网这句提醒针对的是官方 Linux 二进制。
不拿「更新」当性能结论
26.13.0 自己都写了:相对上一版 Current,几乎只动 LTS 元数据。争论「26 是不是比 24 更快」没有落在这篇发布说明里。要对比,用你们自己的服务压测和依赖矩阵说话。官网这篇只解决「算不算 LTS、窗口到何时、Linux 上有没有 libatomic 坑」。
生产仍钉 24、新服务试 26、或在暂存环境先跑一轮依赖安装与单测,都是常见拆法。两套 LTS 并存的阶段,把镜像标签、.nvmrc / engines 字段和文档里的「默认版本」写清楚,比口头说「我们跟最新」少踩坑。安全补丁照常跟当前钉住的那条 LTS 线,不必为了「版本号更大」强行双线齐头并进。
你们生产现在钉的是 24 还是已经在试 26?升的时候有没有撞上 libatomic?