Node.js 22 LTS 环境默认支持哪些 ES2024 新特性?

文章导读
Node.js 22 系列版本内置 V8 12.4 引擎,默认支持 ECMAScript 2024 标准中的核心语法特性,包括 Promise.withResolvers()、Object.groupBy() 和 Array.fromAsync() 等。开发者无需额外配置即可在脚本中使用这些 API,但涉及 CommonJS 与 ESM 模块互操作时需注意实验性标志。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Node.js 22 系列版本内置 V8 12.4 引擎,默认支持 ECMAScript 2024 标准中的核心语法特性,包括 Promise.withResolvers()Object.groupBy()Array.fromAsync() 等。开发者无需额外配置即可在脚本中使用这些 API,但涉及 CommonJS 与 ESM 模块互操作时需注意实验性标志。

先说结论:Node.js 22 通过升级 V8 引擎默认支持 ES2024 语法,模块互操作需留意标志。

  • 适合:新初始化项目或准备升级至 LTS 线的服务端应用。
  • 先确认:运行 node -v 确保版本号为 22.x,检查 V8 版本是否为 12.4+。
  • 再验证:编写包含新语法的测试脚本,确认无 SyntaxError 报错。

命令速用版

使用以下命令快速检查当前环境是否具备支持 ES2024 特性的基础版本。

# 检查 Node.js 版本
node -v

# 检查内置 V8 引擎版本
node -p process.versions.v8

若 V8 版本低于 12.4,部分 ES2024 特性可能无法使用。

为什么会这样

Node.js 22 默认支持 ES2024 特性是因为其捆绑了 V8 12.4 引擎。JavaScript 语言新特性通常由 V8 引擎实现,Node.js 作为运行时直接继承这些能力。2024 年 6 月 ECMA 大会正式批准 ECMAScript 2024 规范,V8 12.4 版本包含了该标准的核心实现,因此升级到 Node.js 22 后无需 polyfill 即可使用新语法。

分步处理

  1. 确认运行环境:在终端执行 node -v,确保输出以 v22. 开头。
  2. 测试 Promise 新特性:创建 test-es2024.js,写入 Promise.withResolvers() 代码。
  3. 测试数组对象新方法:在同一文件中尝试 Object.groupBy()Array.prototype.toSorted()
  4. 执行脚本:运行 node test-es2024.js,观察控制台输出。

怎么验证是否生效

编写以下代码片段并运行,若无报错且输出预期结果,说明环境已支持。

Node.js 22 LTS 环境默认支持哪些 ES2024 新特性?
const { promise, resolve } = Promise.withResolvers();
setTimeout(() => resolve('ES2024 OK'), 100);
promise.then(console.log);

const arr = [1, 3, 2];
console.log(arr.toSorted()); // 应输出 [1, 2, 3]

若控制台打印 ES2024 OK 且数组排序正确,则特性生效。若出现 TypeErroris not a function,则当前环境不支持。

常见坑

  • 模块加载限制:在 Node.js 22 中直接使用 require() 加载 ESM 模块通常需要开启 `--experimental-require-module` 标志,且被加载模块不能有顶层 await。
  • LTS 时间节点:Node.js 22 于 2024 年 10 月进入长期支持(LTS)阶段,在此之前属于 Current 版本,生产环境升级前需评估稳定性。
  • TypeScript 支持:部分资料提及后续小版本可能原生支持 TypeScript,但标准 ES2024 特性仅指 JavaScript 语法,TS 类型擦除仍需编译工具或特定版本支持。

常见问题

Node.js 22 默认支持 TypeScript 吗?

标准 Node.js 22 版本默认执行 JavaScript 文件,TypeScript 支持取决于具体小版本及实验性特性,建议仍使用 ts-node 或编译步骤以确保稳定。

如何启用 require() 加载 ESM 模块?

需添加启动标志 `--experimental-require-module`,且确保目标 ESM 模块不包含顶层 await 异步代码。

ES2024 特性需要配置 package.json 吗?

不需要,这些是运行时引擎特性,与 package.json 中的 type 字段无关,直接在代码中调用即可。

参考来源

  • Node.js 22.0.0 (Current) Release Blog - Node.js Official Blog (2024-04-24)
  • ECMAScript 2024 正式发布,新特性一览 - CSDN 博客 (2024-08-21)
  • Node.js 22 正式发布,支持 Require() ESM 模块!- 技术资讯 (2024-04-28)
  • 全新 Node.js 22 登场:探索它带来的顶级开发特性!- 开发者社区 (2024-04-30)