Node.js 26 发布:Temporal API 与运行时现代化
Node.js 26 的发布标志着该平台在现代化其核心 API 和引擎方面迈出了重要一步。虽然版本升级带来了常规的性能改进和依赖更新,但最引人注目的新增功能是默认启用了 Temporal API,解决了 JavaScript 生态系统中长期存在的一个痛点:日期和时间处理。
作为“Current”版本的标准做法,Node.js 26 将在未来六个月内作为前沿版本,然后在 10 月进入长期支持(LTS)阶段。对于开发者而言,这次发布与其说是关于单一的“杀手级功能”,不如说是清理历史包袱并集成现代 TC39 提案的累积效应。
Temporal API 的到来
Node.js 26 中最受期待的变化是现在默认启用的 Temporal API。多年来,JavaScript 开发者一直依赖过时的 Date 对象,该对象因其混乱的 API 和对时区及日历系统的支持不足而广受批评。为了填补这一空白,社区一直严重依赖 Moment.js、Luxon 和 date-fns 等第三方库。
有了 Temporal,Node.js 直接在运行时中提供了一个强大且功能丰富的替代方案。正如 Hacker News 社区成员所指出的,这是向平台原生日期/时间处理迈出的受欢迎的一步:
"Moment 和 Luxon 相当不错,但合理的日期/时间处理理应直接内置在平台中。"
V8 14.6 与新语言特性
Node.js 26 将 V8 JavaScript 引擎更新至版本 14.6.20.33。这次更新不仅仅是为了提升原始速度;它还为运行时带来了几个值得注意的 TC39 提案:
Map Upsert
[Weak]Map.prototype.getOrInsert() 和 getOrInsertComputed() 方法引入了一种更高效的处理缓存类模式的方法。有趣的是,一些开发者注意到这里对 "upsert" 的定义在语义上发生了变化。虽然传统上被视为 "Update or Insert"(更新或插入),但 V8 的实现侧重于 "Get or Insert"(获取或插入)。
Iterator Sequencing
新增的 Iterator.concat() 允许更轻松地对迭代器进行排序,从而简化了开发者处理数据流和复杂迭代逻辑的方式。
现代化平台:移除与弃用
Node.js 26 继续了激进的“SEMVER-MAJOR”变更的趋势,以移除过时代码并减轻核心团队的维护负担。关键的移除项包括:
http.Server.prototype.writeHeader():现已完全移除。开发者必须迁移到writeHead()。- 遗留的 Stream 模块:内部的
_stream_wrap、_stream_readable、_stream_writable、_stream_duplex、_stream_transform和_stream_passthrough模块已被清除。 - TypeScript Transforms:
--experimental-transform-types标志已被移除,这标志着运行时处理类型转换的方式发生了转变。 - Corepack:Corepack 的文档已被移除,且用户注意到它不再随 Node.js 26 一起发布,这可能会影响那些将其作为安装
pnpm的主要方法的用户。
其他值得注意的更新
- Undici 8:默认 HTTP 客户端已更新至版本 8.0.2,继续提高网络请求的性能和可靠性。
- 构建要求:最低 GCC 要求已提升至 13.2,并且不再支持 Python 3.9。
- Crypto 增强:该版本包含了对
crypto模块的多次更新,包括对KeyObjectAPI 的原始密钥格式支持以及非对称密钥导入的统一。
社区观点
虽然该版本发布后普遍受到好评,但社区仍在继续推动那些他们认为核心库中缺失的功能。一些开发者对内置的 SQLite 模块仍带有实验性标签表示失望,而另一些人则感叹缺乏原生的 WebSocket 服务器实现,以简化部署并提高安全性。
对于想要升级的用户,建议审计您对遗留的 http 和 stream 方法的使用情况,以避免破坏性变更。一旦完成向 Temporal 的迁移,对重型日期处理库的需求可能会最终开始减少。