Node.js 25.9.0 迁移:模块 mock 合并为 exports,AsyncLocalStorage 支持 using scopes
发布说明:Node.js 25.9.0 (2026-04-01) / Node.js 25.0.0
Test runner 模块 mock:defaultExport / namedExports 合并为 exports
MockModuleOptions.defaultExport 和 MockModuleOptions.namedExports 已合并为单个选项 MockModuleOptions.exports,以符合用户预期和其他测试运行器的行为。MockModuleOptions.exports 上的 default 属性表示默认导出,自身可枚举属性被视为命名导出。
自动迁移:
npx codemod @nodejs/mock-module-exports
25.9.0 其他值得注意的变化
async_hooks:为AsyncLocalStorage增加 using scopes(SEMVER-MINOR) #61674cli:增加--max-heap-size选项 #58708crypto:增加 TurboSHAKE 与 KangarooTwelve Web Cryptography 算法 #62183repl:增加可自定义错误处理 #62188sea:在 SEA 中支持 ESM 入口点的 code cache #62158stream:增加stream/iter实现 #62066
另外:
- 根证书更新到 NSS 3.121
- 时区更新到 2026a
- 废弃
module.register()(DEP0205)
Node.js 25.0.0 主要行为变化
Node.js 25.0.0 于 2025-10-15 发布,升级到 25.x 时需要留意以下变化:
- V8 14.1:
JSON.stringify性能大幅提升;Uint8Array获得原生.toBase64()、.fromBase64()、.toHex()、.fromHex()。 - Permission model 增加
--allow-net(限制进程可连接的主机名/IP)和--allow-inspector。 - Web Storage(
localStorage/sessionStorage)默认启用,file-backed,按 origin 存放。 ErrorEvent现在是全局对象。- Portable compile cache(
--compile-cache)。 - WebAssembly JSPI 启用。
- Corepack 不再随 Node.js 分发。
- 移除:
fs.F_OK/R_OK/W_OK/X_OK常量(使用fs.constants.*);SlowBuffer完全移除(使用Buffer.allocUnsafe());assert.CallTracker移除;assert.fail多参数形式移除;_stream_*内部模块废弃(从node:stream导入)。
支持状态
Node.js 25 是 Current 线;bug fixes 结束于 2026-04-01,安全修复结束于 2026-06-01(per versionlog)。生产用户应使用 LTS 线。
升级注意
- 测试中仍在使用
MockModuleOptions.defaultExport/MockModuleOptions.namedExports的地方,改为MockModuleOptions.exports,或先跑npx codemod @nodejs/mock-module-exports。 - 使用权限模型时,检查
--allow-net允许的 hostname/IP 列表;--allow-inspector按需开启。 - 依赖 Corepack 的流程需要单独安装 Corepack,Node.js 25 不再分发。
- 替换已移除 API:
SlowBuffer->Buffer.allocUnsafe(),fs.F_OK等 ->fs.constants.*,assert.CallTracker和assert.fail多参数形式需要改写,_stream_*改为从node:stream导入。 - 升级前确认
module.register()调用点;该方法已标记废弃(DEP0205)。 - Web Storage 默认启用且按 origin 文件存储,测试和 SSR 环境需要关注状态残留与清理。
- 新增的
--max-heap-size、stream/iter、TurboSHAKE / KangarooTwelve、REPL 自定义错误处理、SEA ESM code cache 可按需接入。