第 2 章 功能
本节包含有关红帽构建的 Node.js 20 发行版本中的功能更改的信息。
2.1. 新特性和更改的功能 复制链接链接已复制到粘贴板!
Node.js 20 LTS 有以下红帽构建的 Node.js 支持的新功能和增强。
有关 Node.js 20 LTS 的详细信息,请参阅 上游社区 发行注记 和文档。
2.1.1. V8 JavaScript 引擎升级到 v11.3 复制链接链接已复制到粘贴板!
此发行版本包括将 V8 JavaScript 引擎升级到 v11.3,它是 Chromium 113 的一部分。
升级的 V8 JavaScript 引擎包括以下新功能和增强:
有关 V8 JavaScript 引擎中可用更改的更多信息,请参阅 V8 博客。
2.1.2. 测试运行程序模块的完整支持 复制链接链接已复制到粘贴板!
红帽构建的 Node.js 20 将测试运行程序模块作为可在生产环境中使用的稳定功能提供。在早期版本中,test runner 模块仅作为实验性功能提供。
test runner 模块不旨在替换 Jest 或 Mocha 等全功能测试框架。test runner 模块提供了一种快速、简单的方法来编写和运行测试套件,而无需安装其他依赖项。
在红帽构建的 Node.js 20 中,测试运行程序模块包括以下类型的增强功能:
-
可以使用
node --test标志调用的命令行测试运行程序 -
使用
--test-reporter标志配置和自定义测试报告器 -
使用
--experimental-test-coverage标记进行实验性测试覆盖 - 模拟功能
如需更多信息,请参阅 Node.js Test Runner 文档。
2.1.3. 自定义 ESM loader hooks 在专用线程上运行 复制链接链接已复制到粘贴板!
在红帽构建的 Node.js 20 中,您通过加载程序提供的 ECMAScipt 模块(ESM) hook (例如,--experimental-loader=myhook.mjs)在专用线程上运行,它与主应用程序线程分开。通过为加载程序提供单独的范围,这个增强可保护应用程序代码免受潜在的影响。
2.1.4. synchronous import.meta.resolve () function 复制链接链接已复制到粘贴板!
在红帽构建的 Node.js 20 中,import.meta.resolve () 函数会以同步方式返回值。但是,根据您的偏好,您仍然可以定义自定义加载程序 解析 hook 作为同步或同chronous 功能。即使加载了异步 解析 hook,import.meta.resolve () 函数也会为应用程序代码同步返回值。
2.1.5. Web Crypto API 使用 WebIDL 转换器 复制链接链接已复制到粘贴板!
在红帽构建的 Node.js 20 中,Web Crypto API coerces 并根据其 WebIDL 定义验证功能参数,类似于 Web Crypto API 的其他实现。此功能增强有助于提高 Node.js 和 Web Crypto API 的浏览器实现之间的互操作性。
2.1.6. 属性 import.meta.resolve 不再依赖于 CLI 标记 复制链接链接已复制到粘贴板!
从红帽构建的 Node.js 20 开始,import.meta.resolve (specifier) 属性不再依赖于 --experimental-import-meta-resolve 命令行界面(CLI)标记。现在,您可以使用 import.meta.resolve (specifier) 属性获取指定符字符串解析到的绝对字符串,这与 CommonJS 模块中的 require.resolve 功能类似。此功能增强有助于将 Node.js 与浏览器和其他服务器端运行时保持一致。
如需更多信息,请参阅 Node.js import.meta.resolve 文档。
2.1.7. method module.register 用于模块自定义 hook 复制链接链接已复制到粘贴板!
红帽构建的 Node.js 20 提供了属于 node:module API 的新 module.register (specifier[, parentURL][, options]) 方法。您可以使用这个新方法指定导出模块自定义 hook 的文件,将数据传递给 hook,并使用这些 hook 建立通信频道。此增强会取代之前版本中的行为,这需要使用 --experimental-loader 标志来指定导出 hook 的文件。
为确保自定义 hook 在任何应用程序代码运行前注册,请考虑在运行使用寄存器功能的应用程序时使用 --import 标志。
例如:
node --import ./file-that-calls-register.js ./app.js
如需更多信息,请参阅 Node.js module.register 文档。
2.1.8. 对 CommonJS 模块的模块自定义 加载 hook 支持 复制链接链接已复制到粘贴板!
红帽构建的 Node.js 20 可让模块自定义 hook 作者 处理负载 hook 中的 ESM 和 CommonJS 源。当应用程序的主入口点由 ESM loader 处理时,这个增强适用于使用 导入 或 require 语句引用的 CommonJS 模块。例如,当入口点是 ESM 文件或使用 --import 标志时,这个增强是相关的。这有助于简化 Node.js 加载过程的自定义,因为软件包作者可以执行额外的 Node.js 自定义,而无需依赖已弃用的 API,如 require.extensions。
如需更多信息,请参阅 Node.js Hook:加载文档。
2.1.9. 增强的流性能 复制链接链接已复制到粘贴板!
红帽构建的 Node.js 20 提高了可读和可写入流的性能。此功能增强包括改进,如减少内存开销,改进了对可读流的 async iterator 消耗,并改进了可读流的 pipeTo 消耗。