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 即可使用新语法。
分步处理
- 确认运行环境:在终端执行
node -v,确保输出以v22.开头。 - 测试 Promise 新特性:创建
test-es2024.js,写入Promise.withResolvers()代码。 - 测试数组对象新方法:在同一文件中尝试
Object.groupBy()或Array.prototype.toSorted()。 - 执行脚本:运行
node test-es2024.js,观察控制台输出。
怎么验证是否生效
编写以下代码片段并运行,若无报错且输出预期结果,说明环境已支持。
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 且数组排序正确,则特性生效。若出现 TypeError 或 is 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)