首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >node v25.9.0 更新来了:测试运行器模块 Mock 大升级,AsyncLocalStorage、CLI、Crypto、REPL、Stream 等多项能力增强

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

作者头像
福大大架构师每日一题
发布2026-04-21 14:05:40
发布2026-04-21 14:05:40
1090
举报
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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::GetSSLCtx API
  • • 在 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
  • • 大量性能、兼容性和安全修复

·


我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、先看最值得关注的变化
    • 1. 测试运行器模块 Mock 能力改进
    • 2. AsyncLocalStorage 增加 using scopes
    • 3. CLI 新增 --max-heap-size 选项
    • 4. Crypto 增加 TurboSHAKE 和 KangarooTwelve Web Cryptography 算法
    • 5. REPL 增强:可定制错误处理
    • 6. SEA 支持 ESM 入口点代码缓存
    • 7. Stream 新增 stream/iter 实现
  • 二、完整更新内容梳理
  • Notable Changes 重点内容
    • 测试运行器模块 Mock 改进
    • 其他重要变化
  • 三、提交内容详解
    • 1. async_hooks
    • 2. benchmark
    • 3. buffer
    • 4. build
    • 5. cli
    • 6. crypto
    • 7. deps 依赖更新
    • 8. diagnostics_channel
    • 9. doc 文档更新
    • 10. esm
    • 11. events
    • 12. fs
    • 13. inspector
    • 14. lib
    • 15. module
    • 16. quic
    • 17. repl
    • 18. sea
    • 19. src
    • 20. stream
    • 21. test
    • 22. test_runner
    • 23. tools
    • 24. typings
    • 25. url
    • 26. util
    • 27. wasm
    • 28. worker
    • 29. zlib
  • 四、这一版更新给开发者带来的直接感受
    • 1. 测试能力更现代
    • 2. 异步上下文更强
    • 3. 启动和内存控制更方便
    • 4. 加密与 WebCrypto 能力继续完善
    • 5. REPL 和调试体验更灵活
    • 6. 性能与稳定性持续优化
  • 五、适合哪些人重点关注这次更新
  • 六、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档