当前位置: 首页 > news >正文

node v25.9.0 更新来了:测试运行器模块 Mock 大升级,AsyncLocalStorage、CLI、Crypto、REPL、Stream 等多项能力增强

Node.js v25.9.0 已正式发布,这一版本包含多项值得关注的改进,尤其是在测试运行器模块 Mock、AsyncLocalStorage、CLI、Crypto、REPL、SEA、Stream 等方面都有明显增强。同时还包含大量底层修复、文档更新、依赖升级和测试补丁。

如果你正在使用 Node.js 开发服务端应用、工具链、测试框架,或者关注新版本对现有代码的影响,那么这次更新非常值得认真看一遍。下面我将按照“Notable Changes”和“Commits”中的内容,完整梳理 v25.9.0 的更新点,帮助你快速掌握这次版本升级的核心变化。


一、先看最值得关注的变化

1. 测试运行器模块 Mock 能力改进

这次更新里,测试运行器模块的 Mock 机制是最重要的变化之一。

原先:

  • MockModuleOptions.defaultExport
  • MockModuleOptions.namedExports

这两个选项现在已经合并为一个统一选项:

  • MockModuleOptions.exports

这样设计是为了更贴近用户直觉,也更符合其他测试运行器的习惯。

新的规则是:

  • MockModuleOptions.exports上的default属性代表默认导出
  • 其自身可枚举属性会被当作命名导出

这意味着模块 Mock 的写法会更统一,也更容易理解。

同时,官方还提供了自动迁移方案,可以帮助用户将旧代码迁移到新写法。对于正在使用模块 Mock 的项目来说,这一项非常值得立即关注,因为它关系到测试代码的兼容性与维护成本。


2. AsyncLocalStorage 增加 using scopes

async_hooks相关能力也有增强,AsyncLocalStorage新增了 using scopes 支持。

这对异步上下文管理是一个很实用的扩展,意味着在某些场景下,资源作用域与异步上下文的配合会更自然。对于关注请求链路上下文、日志追踪、异步隔离的开发者来说,这是一个有价值的增强。


3. CLI 新增--max-heap-size选项

命令行新增了--max-heap-size参数。

这意味着在启动 Node.js 进程时,可以更方便地控制堆内存大小,对内存敏感型应用、容器环境、性能调优场景都会有帮助。


4. Crypto 增加 TurboSHAKE 和 KangarooTwelve Web Cryptography 算法

crypto方面新增了 TurboSHAKE 和 KangarooTwelve Web Cryptography 算法支持。

这属于面向加密能力的扩展,意味着 Node.js 的 Web Crypto 能力进一步增强,适合需要更丰富算法支持的场景。


5. REPL 增强:可定制错误处理

REPL 新增了可定制错误处理能力,这会让交互式调试、命令行实验环境变得更灵活。

同时,REPL 还移除了对domain模块的依赖,这也是一次架构层面的简化。


6. SEA 支持 ESM 入口点代码缓存

SEA 现在支持为 ESM 入口点提供 code cache。

如果你在使用 SEA,这项改动对启动性能和打包体验都有潜在价值。


7. Stream 新增stream/iter实现

stream模块新增了stream/iter实现,这意味着流式处理能力继续扩展。

同时,还配套增加了相关基准测试和测试用例,说明这一功能是带着完整验证进入版本的。


二、完整更新内容梳理

下面按照官方变更和提交内容逐项整理,确保不遗漏。


Notable Changes 重点内容

测试运行器模块 Mock 改进

  • MockModuleOptions.defaultExport 和 MockModuleOptions.namedExports 已合并为 MockModuleOptions.exports
  • exportsdefault属性表示默认导出
  • 自身可枚举属性表示命名导出
  • 提供了自动迁移方案,帮助更新现有代码

其他重要变化

  • async_hooks:为AsyncLocalStorage增加 using scopes
  • cli:新增--max-heap-size选项
  • crypto:新增 TurboSHAKE 和 KangarooTwelve Web Cryptography 算法
  • repl:增加可定制错误处理
  • repl:移除对domain模块的依赖
  • sea:支持 ESM 入口点的 code cache
  • stream:新增stream/iter实现

三、提交内容详解

下面开始逐项展开全部提交内容。

1. async_hooks

  • AsyncLocalStorage增加 using scopes

这是异步上下文管理的重要增强。


2. benchmark

  • 为实验性的stream/iter增加基准测试
  • 修复 dgram/single-buffer 中的解构写法

3. buffer

  • 提升多个 Buffer 操作的性能

4. build

  • 支持 configure.py 中空的 libname 标志
  • 修复 timezone-update 的路径引用
  • 在 IBMi 上跳过 dockit
  • 修复--node-builtin-modules-path

5. cli

  • 新增--max-heap-size选项

6. crypto

  • 将根证书更新为 NSS 3.121
  • 增加 TurboSHAKE 和 KangarooTwelve Web Cryptography 算法
  • 为 addon 访问 OpenSSL 上下文增加crypto::GetSSLCtxAPI
  • 在 SubtleCrypto 中拒绝没有 seed 的 ML-KEM/ML-DSA PKCS#8 导入
  • CShakeParamsKmacParams的 length 重命名为outputLength
  • 重构 WebCrypto AEAD 算法的 auth tag 处理
  • normalizeAlgorithm中只读取一次 algorithm name 属性

7. deps 依赖更新

  • ada 更新到 3.4.4
  • timezone 更新到 2026a
  • googletest 更新到指定提交
  • simdjson 更新到 4.5.0
  • ngtcp2 更新到 1.21.0
  • V8 进行了多次 cherry-pick
  • npm 升级到 11.12.1
  • 禁用 rust icu 的 compiled_data features
  • sqlite 更新到 3.51.3
  • merve 更新到 1.2.2

8. diagnostics_channel

  • 为 web locks 增加 diagnostics channels

9. doc 文档更新

  • 弃用module.register()(DEP0205)
  • 澄清特性不能同时既是 experimental 又是 deprecated
  • 修复 quic 文档中的拼写问题
  • 将 sqlite 类型转换部分移动到正确层级
  • 添加最后一个安全发布 steward 的信息
  • 改为使用 npm 发布版本的 doc-kit
  • 修正response.sendDate中关于 Date header 的过度表述
  • 修正 guaranteed 的拼写
  • 澄清 main 字段相关说明
  • 删除 bat/cmd 部分中带 shell 的 spawn 示例
  • 修复 minor typo
  • 添加 vulnerabilities.json 的路径说明
  • 弃用node:crypto中 CryptoKey 的使用
  • 修复 environment_variables 的小拼写问题
  • 说明 test 和 test-only 目标不会运行 linter
  • 澄清fs.ReadStreamfs.WriteStream不是可构造的
  • 澄清 shell 的任何 truthy 值都属于 DEP0190
  • 删除 debugger 中过时的 Chrome 66 和 ndb 参考
  • fs.stat添加throwIfNoEntry版本历史
  • mock.module增加关于 customization hooks 的说明和注意事项
  • 澄清--eval对于以-开头脚本的语法
  • 修复 worker loader hook 注释中的 typo

10. esm

  • 修复 worker loader hook 注释中的 typo
  • 修复 loadCache eviction 中 source phase identity 的 bug
  • 修复 finalizeResolution 中的路径规范化

11. events

  • 优化 emit 时对 listeners 数组的克隆,避免每次都克隆

12. fs

  • 修复cpSync处理非 ASCII 字符的问题

13. inspector

  • 增加Target.getTargets
  • 提取TargetManager

14. lib

  • SubtleCrypto中优先使用 primordials
  • SubtleCrypto.supports变为可枚举

15. module

  • 修复从 ESM 导入的被 Mock 的 CJS 模块覆盖率统计问题

16. quic

  • 从 session keys 选项中移除 CryptoKey 支持

17. repl

  • 使用 vm 的 DONT_CONTEXTIFY context
  • 增加可定制错误处理
  • 处理 close 后异步上下文抛出的异常
  • 移除对 domain 模块的依赖

18. sea

  • 支持 ESM 入口点的 code cache

19. src

  • 改善 EC JWK 导入性能
  • 处理 ArrayBufferViewContents::Read 中的 null backing store
  • 将 AsyncWrap 中的 context_frame 字段转换为 internal field
  • 支持使用 OpenSSL 4.0 进行编译和链接

20. stream

  • 增加stream/iter的实现
  • 在 pipeline 中保留错误优先于 AbortError
  • 将 onwrite 回调中的 bind 替换为箭头函数

这部分是本次更新里非常值得关注的一组变化。stream/iter的加入,让流式处理能力继续扩展;同时 pipeline 的错误处理逻辑也更清晰,避免 AbortError 覆盖真正的错误;而 onwrite 回调的优化,则属于实现细节上的调整,重点是更简洁和稳定。


21. test

  • 更新 WebCryptoAPI 的 WPT 到 2cb332d710
  • 更新 URL 的 WPT 到 fc3e651593
  • 等待重新附加前,在重启调试器时先进行初始中断
  • 在 AIX 上禁用不稳定的 WPT Blob 测试
  • 为实验性的stream/iter实现增加测试
  • 修复调试器重启测试中的 flaky run wait 问题
  • 在 AIX 7.3 上跳过test-cluster-dgram-reuse
  • 为 WebCrypto Promise.prototype.then 污染回归问题增加测试
  • 再次更新 WebCryptoAPI 的 WPT 到 6a1c545d77

可以看到,这一批测试相关提交的密度很高,说明本次版本不仅在功能上有新增,也对稳定性做了大量验证。尤其是 WebCrypto、URL、调试器、AIX 兼容性、stream/iter 的测试补充,都体现出版本合入时的谨慎。


22. test_runner

  • 为模块 Mock 增加 exports 选项
  • 使其兼容 fake timers
  • 当 suite 出现错误时设置非零退出码

这部分与前面提到的 MockModuleOptions.exports 是直接对应的,也是本次测试运行器升级的核心实现之一。除此之外,兼容 fake timers 和错误退出码的改进,也会直接影响测试环境的使用体验和 CI 结果判断。


23. tools

  • 在 tools/eslint 中将 picomatch 从 4.0.3 升级到 4.0.4
  • 在 tools/doc 中将 yaml 从 2.8.2 升级到 2.8.3
  • 采用--check-for-duplicates的 NCU 标志
  • 在 tools/doc 中升级 picomatch
  • 在 tools/eslint 中将 flatted 从 3.4.1 升级到 3.4.2
  • 升级 eslint 依赖
  • 不再吞掉 lint-nix workflow 中的错误
  • 增加 eslint-plugin-regexp
  • 修复 lint-nix job 的超时错误
  • 在 tools/eslint 中将 flatted 从 3.3.3 升级到 3.4.1
  • 在 tools/doc 中将 undici 从 6.23.0 升级到 6.24.1
  • 验证所有推送到 main 的提交
  • 在更新 Merve 时保留 GN 文件

这部分主要是工具链和维护性改进,虽然不直接面向运行时功能,但对构建、文档、lint、CI 流程的稳定性都有重要意义。


24. typings

  • 理顺 TypedArray 类型

这属于类型定义层面的整理,虽然表面上看是类型结构优化,但对 TypeScript 用户的开发体验会有帮助。


25. url

  • 为 ada 启用 simdutf

这是 URL 相关实现上的性能和底层优化方向的变化。


26. util

  • styleText中允许使用颜色别名

这会让文本样式处理更加灵活。


27. wasm

  • 支持 js string constant 的 ESM import

这扩展了 WebAssembly 与 ESM 之间的集成能力。


28. worker

  • 进行 heap profile 优化

这属于 Worker 相关性能优化,重点是更好的内存分析和性能表现。


29. zlib

  • 修复在 write 期间调用reset()时导致的 use-after-free 问题

这是一个非常关键的修复,涉及内存安全与稳定性,属于应该重点关注的 bugfix。


四、这一版更新给开发者带来的直接感受

如果只从开发体验角度总结,Node.js v25.9.0 的变化可以归纳为几类:

1. 测试能力更现代

测试运行器模块 Mock 的统一设计,让模块模拟更自然,减少概念混乱,也更利于迁移。

2. 异步上下文更强

AsyncLocalStorage 增强后,对链路追踪、上下文传递、请求隔离等场景更友好。

3. 启动和内存控制更方便

CLI 新增的--max-heap-size对资源调优很实用。

4. 加密与 WebCrypto 能力继续完善

新增算法、API 调整、底层处理优化,说明 Crypto 相关能力仍在持续演进。

5. REPL 和调试体验更灵活

交互式开发体验进一步增强。

6. 性能与稳定性持续优化

Buffer、events、fs、stream、worker、zlib 等模块都能看到针对性能和安全的细节修复。


五、适合哪些人重点关注这次更新

如果你属于以下几类开发者,建议重点查看 v25.9.0:

  • 正在使用 Node.js 测试运行器模块 Mock 的人
  • 依赖 AsyncLocalStorage 做上下文管理的人
  • 关心内存控制和启动参数的人
  • 使用 WebCrypto、crypto、quic 的人
  • 依赖 REPL、调试器、SEA 的人
  • 需要高稳定性流处理、文件处理、压缩处理的人
  • 维护 CI、lint、构建系统的人

六、总结

代码地址:github.com/nodejs/node

Node.js v25.9.0 这次更新非常全面,既有面向开发者的显性增强,也有大量底层和稳定性修复。最值得关注的几个关键词是:

  • 测试运行器模块 Mock 统一化
  • AsyncLocalStorage using scopes
  • --max-heap-size
  • TurboSHAKE / KangarooTwelve
  • REPL 可定制错误处理
  • SEA 的 ESM code cache
  • stream/iter
  • 大量性能、兼容性和安全修复
http://www.jsqmd.com/news/674825/

相关文章:

  • 告别折腾:用K3梅林固件实现家庭IPv6网络最简配置指南
  • 用STM32标准库给MS5837写驱动,我踩过的那些坑(I2C时序、CRC校验、混合编程)
  • 告别手动点击!用Python+Selenium搞定AERONET AOD数据批量下载(附完整代码)
  • Win10/Win11网络排错手记:当‘ARP项添加失败’时,我是如何用netsh搞定IP-MAC绑定的
  • 进程调度算法到底怎么选?通过C++代码实测FCFS、SJF、HPR、HRN的性能差异
  • 告别I/O瓶颈:用Windows内存映射(CreateFileMapping)5分钟搞定大文件读取
  • 告别单调终端:离线环境也能玩转Oh My Zsh主题和插件(含Powerlevel10k配置)
  • 从OFDM到OTFS:在延迟-多普勒域重新思考无线波形设计
  • 当Nginx在K8s里‘找不到’服务:一次完整的CoreDNS服务发现排错与优化记录
  • 蓝牙安全基石:深入解析AES-CCM加密算法与实战应用
  • 【产品经理】PRD文档实战:从5W2H到高效协作的完整指南
  • Camunda 7工作流引擎核心API详解与Springboot集成实战配置指南
  • 前端工程规范制定
  • 汽车以太网TC8协议测试全景解析
  • 低成本高精度方案:STM32配合AS5600磁编码器实现步进电机闭环控制(DRV8825实测)
  • 保姆级教程:在Ubuntu 20.04上搞定Velodyne VLP-16雷达的ROS驱动与Rviz可视化(含网络配置避坑)
  • MangoPi-MQ(麻雀)开发板Tina系统编译踩坑实录:从补丁到屏幕变暗的完整修复指南
  • 用OpenCV和PIL搞定MPII数据增强:旋转、缩放、翻转与噪声添加的完整代码示例
  • i.MX6ULL裸机开发避坑指南:从选型到调试,这些ARM核心概念你必须先搞懂
  • SAP ABAP开发实战:如何用SOTR_SERV_TABLE_TO_STRING和SCMS_STRING_TO_XSTRING函数搞定内表数据转Excel文件下载
  • 在Vmware嵌套的CentOS 7里搭KVM:从虚拟化检测到桥接网络避坑全记录
  • Android内存管理实战:如何用lmkd优化你的应用性能(附PSI监控技巧)
  • 创始基因:在亚马逊,如何从品牌“历史原点”找到穿越周期的终极定位
  • 零成本玩转AI:用华为云免费云主机+ModelArts搭建商超商品检测系统
  • 【异构图实战,篇章1】RGCN:从理论到实践,构建多关系图神经网络应用指南
  • 避坑指南:MTK平台移植Widevine L1时,那些SP META工具和Key安装的常见报错与解决
  • ModTheSpire深度解析:Slay The Spire高效模组加载与字节码注入终极指南
  • 深入RK3588 DTS:从频率电压表看Rockchip芯片的能效设计思路与调试技巧
  • 从486到树莓派:个人计算设备的微型化与平民化革命
  • 嵌入式Linux下用SPI扩展串口:WK2124驱动从编译到调试的完整避坑指南