Node.js 18 发行注记
前言 复制链接链接已复制到粘贴板!
发行版本日期:2023 年 1 月 31 日
第 1 章 所需的基础架构组件版本 复制链接链接已复制到粘贴板!
在使用红帽构建的 Node.js 时,需要以下基础架构组件。除了明确指定为支持的组件外,红帽不提供对这些组件的支持。
第 2 章 功能 复制链接链接已复制到粘贴板!
本节包含有关红帽构建的 Node.js 18 发行版本中引入的功能更改的信息。
2.1. 新特性和更改的功能 复制链接链接已复制到粘贴板!
Node.js 18 LTS 有以下红帽构建的 Node.js 支持的新功能和增强。
有关 Node.js 18 LTS 的详细信息,请参阅上游发行注记 和 上游文档。
2.1.1. V8 JavaScript 引擎升级到 v10.2 复制链接链接已复制到粘贴板!
此发行版本包括将 V8 JavaScript 引擎升级到 v10.2,它是 Chromium 101 的一部分。
升级的 V8 JavaScript 引擎包括以下新功能和增强:
-
findLast ()和findLastIndex ()数组方法 -
intl.LocaleAPI 的改进 -
Intl.supportedValuesOffunction - 现在,类字段 和私有类方法的 性能改进,它们现在作为普通属性存储快速初始化
有关 V8 JavaScript 引擎中可用更改的更多信息,请参阅 V8 博客。
2.1.2. HTTP 超时的默认值 复制链接链接已复制到粘贴板!
此发行版本包括 HTTP 超时的以下改进:
-
server.headersTimeout属性限制解析器等待接收完整 HTTP 标头的时间长度,现在的默认值为60000毫秒(60 秒)。 -
server.requestTimeout属性限制服务器从客户端接收整个请求的时间长度,现在的默认值为300000毫秒(5 分钟)。
如果这些超时过期,服务器会返回 408 错误,并在不将请求监听程序转发到请求监听程序的情况下关闭连接。
当服务器的前面没有部署反向代理时,要防止出现拒绝服务攻击的情况,请确保将这些超时值设置为不是0 的值。
2.1.3. 全局范围内的 Blob 和 BroadcastChannel API。 复制链接链接已复制到粘贴板!
以下 API 现在被完全支持,并作为全局对象提供:
-
Blob类封装可在多个 worker 线程之间安全共享的不可变原始数据。blob是缓冲类的子类。 -
类使异步一对多通信与绑定到同一频道名称的所有其他广播频道实例进行通信。BroadcastChannelBroadcastChannel扩展EventTarget类。
在以前的版本中,这些 API 只是一个技术预览功能。
2.2. 已弃用的功能 复制链接链接已复制到粘贴板!
在 Red Hat build of Node.js 18 发行版本中,以下功能已弃用。
有关本发行版本中已弃用或删除的功能的更多信息,请参阅 nodejs.org 网站。
2.2.1. 在 fs methods 中字符串 coercion 的运行时弃用,用于写入或附加文件 复制链接链接已复制到粘贴板!
当对象有自己的 toString 属性在以下任一方法中作为参数传递时,这个版本包括隐式对象到字符串的运行时弃用:
-
fs.write() -
fs.writeFile() -
fs.appendFile() -
fs.writeFileSync() -
fs.appendFileSync()
作为字符串 coercion 的替代选择,将对象转换为原语字符串。
2.2.2. dns.lookup 和 dnsPromises.lookup 方法中的选项类型 coercion 复制链接链接已复制到粘贴板!
此发行版本删除了在 dns.lookup () 和 dnsPromises.lookup () 方法中作为参数传递的选项类型。如果您使用以下任一选项类型和值组合,Node.js 现在会抛出 ERR_INVALID_ARG_TYPE 错误:
-
family选项的非空的非整数值 -
hints选项的一个非空的非数字值 -
all选项的一个非空的、非布尔类型的值 -
verbatim选项的非空非布尔值
2.2.3. multipleResolves的运行时弃用 复制链接链接已复制到粘贴板!
此发行版本包括 multipleResolves 进程事件的运行时弃用。例如:
process.on('multipleResolves', handler)
process.on('multipleResolves', handler)
multipleResolves 事件不适用于 V8 承诺组合器,这会影响此事件的有用性和可靠性,以便在使用 Promise 构造器时跟踪潜在的错误。例如,Promise.race () 方法也可以触发 multipleResolves 事件,这不一定表示错误。
2.2.4. 对 thenable 对象的支持 复制链接链接已复制到粘贴板!
此发行版本在流实现方法中返回 thenable 对象的功能。使用 thenable 对象可能会导致意外问题,例如,用户以回调风格实现函数,但使用 async 方法。这种类型的实现会导致承诺和回调语义无效。
例如:
作为 thenable 对象的替代选择,使用回调,对于流实现方法避免使用 async 函数。
2.2.5. tls.parseCertString() 复制链接链接已复制到粘贴板!
此发行版本删除了 tls.parseCertString () 方法,这是解析证书主题和签发者字符串的解析程序帮助程序。tls.parseCertString () 方法无法正确处理多值 Relative Distinguished Names (RDN),这可能会导致不正确的表示和安全问题。
另外,_tls_common.translatePeerCertificate 不再转换 subject 和 issuer 属性。
早期版本的 Node.js 建议使用 querystring.parse () 方法作为 tls.parseCertString () 的替代选择。但是,因为 querystring.parse () 也无法正确处理所有证书主题,这个版本不再建议使用 querystring.parse () 作为替代方案。
2.3. 技术预览功能 复制链接链接已复制到粘贴板!
在 Node.js 18 LTS 版本中,以下功能作为技术预览功能提供。
2.3.1. fetch API 复制链接链接已复制到粘贴板!
提供了一个实验性的 fetch API,作为一个全局对象。fetch API 基于 Undici,它是 Node.js 的 HTTP/1.1 客户端,以及提供 Fetch Web API 的 Node.js 实现的 node-fetch 模块。
例如:
const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
const data = await res.json();
console.log(data);
}
const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
const data = await res.json();
console.log(data);
}
由于这个改进,现在可使用以下全局对象:
-
fetch(与浏览器兼容fetch ()函数的版本) -
FormData(一个与浏览器兼容FormData接口的版本) -
标头(与浏览器兼容标头接口的版本) -
Request(一个与浏览器兼容的Request接口版本) -
响应(与浏览器兼容的Response接口版本)
您可以使用 --no-experimental-fetch 命令行选项禁用 fetch API。
2.3.2. 全局范围内的 Web Streams API 复制链接链接已复制到粘贴板!
Web Streams API 在 Red Hat build of Node.js 16 版本中作为技术预览功能引进。在这个发行版本中,Node.js 现在会在全局范围内公开 Web Streams API。这会取代之前版本中的行为,其中 Web Streams API 只能通过 stream/web 核心模块访问。
因此,以下 API 现在作为全局对象提供:
ReadableStream, ReadableStreamDefaultReader, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableByteStreamController, ReadableStreamDefaultController, TransformStream, TransformStreamDefaultController, WritableStream, WritableStreamDefaultWriter, WritableStreamDefaultController, ByteLengthQueuingStrategy, CountQueuingStrategy, TextEncoderStream, TextDecoderStream, CompressionStream, DecompressionStream
2.3.3. ESM Loader Hooks API 支持多个自定义加载程序 复制链接链接已复制到粘贴板!
ESM Loader Hooks API 在 Red Hat build of Node.js 16 版本中作为技术预览功能引进。ESM Loader Hooks API 现在支持多个自定义加载程序。
要使多个加载程序协同工作,此功能使用名为 chaining 的进程,这类似于一个承诺链。 例如,第一次加载器 调用 第二加载器,第二加载器 调用 第三个加载器,以此类推。
如果自定义加载程序没有有意调用链中的下一加载程序,自定义加载程序必须向短电路发送信号。
如需更多信息,请参阅 Node.js ECMAScript 模块文档。
2.3.4. watch 模式 复制链接链接已复制到粘贴板!
现在,您可以使用 node --watch 选项以监视模式运行 Node.js 应用程序。
以监视模式运行应用程序意味着,如果修改导入的文件,进程将重新启动。
2.4. 支持的构架 复制链接链接已复制到粘贴板!
Node.js 构建器镜像和 RPM 软件包可用,并支持与以下 CPU 架构一起使用:
- AMD x86_64
- ARM64
- OpenShift 环境中的 IBM Z (s390x)
- OpenShift 环境中的 IBM Power 系统(ppc64le)
第 3 章 发行组件 复制链接链接已复制到粘贴板!
第 4 章 修复的问题 复制链接链接已复制到粘贴板!
此发行版本在 Node.js 18 LTS 社区版本中包含了所有修复的问题。
第 5 章 已知问题 复制链接链接已复制到粘贴板!
没有影响此版本的已知问题。
第 6 章 影响所需基础架构组件的已知问题 复制链接链接已复制到粘贴板!
没有已知的、会影响到此版本所需基础架构组件的问题。