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.defaultExportMockModuleOptions.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
exports的default属性表示默认导出- 自身可枚举属性表示命名导出
- 提供了自动迁移方案,帮助更新现有代码
其他重要变化
async_hooks:为AsyncLocalStorage增加 using scopescli:新增--max-heap-size选项crypto:新增 TurboSHAKE 和 KangarooTwelve Web Cryptography 算法repl:增加可定制错误处理repl:移除对domain模块的依赖sea:支持 ESM 入口点的 code cachestream:新增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 导入
- 将
CShakeParams和KmacParams的 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.ReadStream和fs.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- 大量性能、兼容性和安全修复
