Node.js 在过去几年中持续演进,每个大版本都带来了值得关注的新特性与改进。本文将梳理 Node.js 20 ~ 26 的核心更新,帮助你了解各版本的亮点与差异。
Node.js 20(2023-04)— Iron
V8 11.3
String.prototype.isWellFormed/toWellFormedArray和TypedArray的 copy-by 方法(toReversed、toSorted等)- 可调整大小的
ArrayBuffer和可增长的SharedArrayBuffer RegExpv 标志(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+ hooksmock支持- 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
fetch、FormData、Headers、Request、Response 以及 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:切换默认模块系统为 ESMfs.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 Mode(
node --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 Management:
using关键字(TC39 Stage 4) RegExp.escapeError.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_process的spawn/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:
- 先升级到 v22,修复 API 兼容性问题
- 再升级到 v24,利用新特性
- 如需现代日期 API,可试用 v26
更多详情可查阅 Node.js 官方发布日志
Comments | 0条评论