Node.js 22 发布:主要新特性与变更概览
JavaScript 开发者社区迎来了一个重要事件——Node.js 22 正式发布。此版本带来了众多改进,将影响后端开发者和命令行工具创建者。让我们来分析一下每个使用 Node.js 的人都应该知道的最重要的变化。
V8 引擎 12.4:速度与新功能
Node.js 22 的核心是更新后的 V8 引擎 12.4 版本。这不仅仅是外观上的升级——它带来了新的 JavaScript 特性,现在即可用于生产环境:
- Array.fromAsync — 一个静态方法,用于从可迭代对象异步创建数组。简化了数据流处理。
- Set 方法 — 直接调用
intersection()、union()、difference()来处理集合,无需第三方库。 - Iterator Helpers — 期待已久的迭代器操作方法(map、filter、take 等)现在“开箱即用”。
针对 ESM 模块的稳定 require()
最受讨论的变化之一是 --experimental-require-module 标志现在默认启用。这意味着您可以使用 require() 加载 ESM 模块(扩展名为 .mjs 或在 package.json 中设置 "type": "module")。
这对开发者意味着什么:
- 无需重写所有代码即可逐步从 CommonJS 迁移到 ESM。
- 能够在旧项目中引入现代 ESM 包。
- 简化大型代码库的迁移过程。
改进的 WebSocket 与网络功能
Node.js 22 包含一个内置的 WebSocket 客户端(之前是实验性的)。现在,创建实时应用程序无需安装 ws 或 socket.io——一切都可以通过全局 WebSocket 对象使用。
同样值得注意的是 HTTP 客户端的改进:默认启用 HTTP/2 支持,并且现在可以使用 fetch() 自动从环境变量中检测代理。
文件系统操作的变更
处理文件的开发者将会欣赏 fs 模块中的新方法:
- fs.cp — 现在稳定且比同类方法更快。
- fs.openAsBlob() — 从文件创建 Blob,无需将整个文件加载到内存中。
- 改进了对 Windows 上符号链接的支持。
已弃用和已移除的内容
与任何重大更新一样,一些功能已被标记为弃用或已移除:
punycode模块已被最终移除(请使用URL或 npm 上的punycode包)。- 命令行参数
--experimental-loader和--experimental-specifier-resolution已被弃用。 --no-experimental-fetch选项不再有效——fetch 现已永久内置。
如何更新
Node.js 22 可在官方网站 nodejs.org 上下载。建议通过版本管理器(nvm 或 fnm)进行更新,以便在需要时快速回退。