Node.js 26 十月转正:Temporal API 默认上线,30年的Date对象该退休了

写代码处理时间,是JavaScript开发者几十年的老痛点。Node.js 26在10月正式进入LTS,最大的变化是Temporal API默认启用——JavaScript终于有了现代化的日期时间方案。

30年的老问题

Date对象从1995年活着至今。它坑很多:月份从0开始、时区处理靠猜、加减日期要自己算毫秒。Moment.js曾是最流行的补救方案,团队后来直接宣布停更,理由是Date本身无药可救。

Temporal彻底重来。它把时间点、时区、日历、时长拆成独立类型:PlainDate管日期,ZonedDateTime管时区,Duration管时长。时区转换一行代码搞定,不用再拼第三方库。

升级Node.js 26之后,代码可以这样写:

“`javascript

const meeting = Temporal.PlainDateTime.from(‘2026-10-20T14:00’);

const tokyo = meeting.toZonedDateTime(‘Asia/Tokyo’);

const later = tokyo.add({ days: 3, hours: 2 });

“`

时区、日历运算全部内置。实现这些的V8引擎同步升级到14.6,除Temporal之外还带来Map.prototype.getOrInsert()和Iterator.concat()等新方法。

HTTP客户端也换了底座

Node.js 26把内置HTTP客户端库Undici升级到8.0。Node.js的fetch()就构建在Undici之上,这次升级优化了连接复用和请求调度,API不用改一行代码,性能直接受益。

升级前必看的三个坑

原生插件要重编。 NODE_MODULE_VERSION更新到147,所有预编译的原生模块(如bcrypt、canvas)必须重新编译,否则直接加载失败。

老API彻底移除。 http.Server.prototype.writeHeader()完全删掉了,改用writeHead()。_stream_wrap、_stream_readable等内部stream模块也不复存在。module.register()进入运行时弃用流程, –experimental-transform-types标志一并移除。上线前先跑一遍CI,把这些报错清干净。

构建环境要求变高。 从源码编译Node.js需要GCC 13.2以上,同时放弃了对Python 3.9的构建支持。还在用老CI镜像的团队要先升级工具链。

发布节奏也变了

Node.js 26是旧版发布模式的最后一个版本。从Node.js 27开始,项目改为每年发布一个大版本,2027年4月上线,10月直接进LTS。版本选择不再纠结,偶数奇数的老规则作废。

Bun和Deno还在前面跑

Bun 1.4和Deno更早支持Temporal,Bun官网测试显示其HTTP吞吐量达到每秒48243次请求,约为Node.js 26.7的两倍。Node.js赢在生态和企业采用率,性能敏感的场景可以考虑Bun,安全隔离要求高的场景适合Deno。

该不该现在升级

10月起Node.js 26进入LTS,维护到2029年4月,生产环境可以开始评估迁移。建议步骤:先在测试环境跑完整回归,重编原生插件,替换掉writeHeader等废弃API,确认无误再推生产。Moment.js和dayjs的依赖可以在这次迁移中顺手换成Temporal,少维护一个第三方库。

Temporal默认启用是个标志性事件——平台把最容易被吐槽的部分修好了,JavaScript处理时间的下半场才真正开始。


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

苏ICP备2025163703号-2   警徽苏公网安备32010502011527号