WSの小屋

Node.js 在过去几年中持续演进,每个大版本都带来了值得关注的新特性与改进。本文将梳理 Node.js 20 ~ 26 的核心更新,帮助你了解各版本的亮点与差异。


Node.js 20(2023-04)— Iron

V8 11.3

  • String.prototype.isWellFormed / toWellFormed
  • ArrayTypedArray 的 copy-by 方法(toReversedtoSorted 等)
  • 可调整大小的 ArrayBuffer 和可增长的 SharedArrayBuffer
  • RegExp v 标志(set notation + properties of strings)
  • WebAssembly Tail Call

Permission Model(实验性)

--experimental-permission 标志开启权限控制:

  • --allow-fs-read / --allow-fs-write 控制文件系统读写
  • --allow-child-process 控制子进程
  • --allow-worker 控制 worker 线程
  • process.permission.has() 运行时权限检查

Stable Test Runner

node:test 模块正式稳定:

  • describe / it / test + hooks
  • mock 支持
  • watch 模式
  • node --test 并行运行多文件

其他亮点

  • ESM Loader 趋稳import.meta.resolve() 同步返回,loader 运行在独立线程
  • ARM64 Windows 官方支持
  • 性能提升EventTarget 初始化成本减半,Ada URL 解析器升级到 2.0
  • SEA(Single Executable Apps):需从 JSON 配置注入 blob

Node.js 21(2023-10)— Current → EOL

Stable fetch / WebStreams

fetchFormDataHeadersRequestResponse 以及 WebStreams 标记为稳定。

V8 11.8

  • Array grouping(Object.groupBy / Map.groupBy
  • ArrayBuffer.prototype.transfer
  • WebAssembly extended-const expressions

Built-in WebSocket(实验性)

--experimental-websocket 启用内置 WebSocket 客户端。

其他亮点

  • Glob 测试node --test **/*.test.js 支持 glob
  • navigator 全局对象navigator.hardwareConcurrency
  • --experimental-default-type:切换默认模块系统为 ESM
  • fs.writeFile 增加 flush 选项
  • llhttp 9.1.2 strict mode:HTTP 解析更严格

Node.js 22(2024-04)— Jod(LTS)

V8 12.4 + Maglev

Maglev 编译器默认启用,短生命周期 CLI 程序性能大幅提升。新增特性:

  • WebAssembly Garbage Collection
  • Array.fromAsync
  • Set methods
  • Iterator helpers

require(esm)(实验性)

--experimental-require-module 允许 require() 加载同步 ESM 模块(需 "type": "module".mjs 后缀)。

node --run

直接运行 package.json 中的 scripts:node --run test

正式稳定的特性

  • Watch Modenode --watch):文件变化自动重启
  • WebSocket 客户端:无需 flag,默认启用
  • fs.glob / fs.globSync:原生 glob 匹配

性能提升

  • Stream 默认 HighWaterMark:16KiB → 64KiB
  • AbortSignal 创建性能大幅优化,fetch 和 test runner 受益

Node.js 23(2024-10)— Current → EOL

过渡版本,无重大新特性。主要包含 V8 小幅升级(13.0)和常规 Bug 修复。


Node.js 24(2025-05)— Krypton(LTS)

V8 13.6

  • Float16Array:16 位浮点数数组
  • Explicit Resource Managementusing 关键字(TC39 Stage 4)
  • RegExp.escape
  • Error.isError
  • WebAssembly Memory64

npm 11

默认升级,带来更好的性能和安全性。

AsyncLocalStorage 默认 AsyncContextFrame

更高效的异步上下文追踪实现。

URLPattern 全局可用

无需 import,直接使用 URLPattern API。

Permission Model → --permission

标志从 --experimental-permission 改为 --permission,趋于稳定。

Test Runner 增强

  • 自动等待子测试完成,无需手动 await
  • 全局 setup / teardown 支持

Undici 7

HTTP 客户端大版本升级。

弃用与移除

  • url.parse() 运行时弃用
  • tls.createSecurePair 移除
  • SlowBuffer 运行时弃用
  • child_processspawn / execFile 弃用 args 参数

Node.js 25(2025-10)— Current → EOL

过渡版本,核心变化:

  • 移除 Corepack(Node.js 24 已预告)
  • 常规 V8 升级与 Bug 修复

Node.js 26(2026-05)— Current(即将 LTS)

Temporal API 默认启用

Temporal 是现代 JavaScript 日期/时间 API,替代有缺陷的 Date。支持时区、日历、精确时间计算等。

// 示例
const now = Temporal.Now.instant()
const zoned = Temporal.Now.zonedDateTimeISO('Asia/Shanghai')
const duration = Temporal.Duration.from({ days: 7 })

V8 14.6

  • Map.prototype.getOrInsert() / getOrInsertComputed():upsert 语义
  • Iterator.concat():迭代器组合

Undici 8

HTTP 客户端进一步升级。

重要弃用与移除

  • _stream_wrap / _stream_readable 等底层 stream 模块移除
  • http.Server.prototype.writeHeader() 移除(改用 writeHead()
  • module.register() 运行时弃用
  • --experimental-transform-types 移除

版本选择建议

版本 状态 建议
v20 Iron ❌ EOL(2026-03) 已停止维护,请尽快迁移
v22 Jod ✅ LTS 稳定可用的生产版本
v24 Krypton LTS(推荐) 特性丰富,推荐生产使用
v26 🆕 Current 可尝鲜,2026-10 进入 LTS

升级建议

如果当前使用 v20,建议跨越升级到 v24 LTS

  1. 先升级到 v22,修复 API 兼容性问题
  2. 再升级到 v24,利用新特性
  3. 如需现代日期 API,可试用 v26

更多详情可查阅 Node.js 官方发布日志

Comments | 0条评论