Node 20 发布

权限模型

Node.js现在有一个实验性的功能叫做权限模型。它允许开发人员在程序执行期间限制对特定资源的访问,例如文件系统操作、子进程生成和工作线程创建。该API存在于一个名为–experimental-permission的标志后面,当启用时,将限制对所有可用权限的访问。通过使用这个功能,开发人员可以防止他们的应用程序访问或修改敏感数据或运行潜在有害的代码。有关权限模型的更多信息可以在Node.js文档中找到。

权限模型是Rafael Gonzaga在#44004中提出。

自定义的 ESM loader hooks 运行在专用线程上

通过加载器提供的ESM钩子(--experimental-loader=foo.mjs)现在在一个专用线程中运行,与主线程隔离开来。这为加载器提供了一个独立的范围,并确保加载器和应用程序代码之间没有交叉污染。
Synchronous import.meta.resolve()
为了与浏览器的行为保持一致,这个函数现在同步返回。尽管如此,用户加载器解析钩子仍然可以定义为异步函数(或者如果作者愿意的话,也可以定义为同步函数)。即使加载了异步解析钩子,对于应用程序代码,import.meta.resolve仍然会同步返回。
这项工作是由Anna Henningsen、Antoine du Hamel、Geoffrey Booth、Guy Bedford、Jacob Smith和Michaël Zasso在#44710中提出。

V8 JavaScript 引擎更新至 11.3 版本

V8引擎已更新到版本11.3,它是Chromium 113的一部分。此版本包括三个新功能的JavaScript API:

稳定版的 test runner

最近更新的Node.js版本20包括对test_runner模块的重要更改。该模块已在最近的更新后标记为稳定版。之前,test_runner模块是实验性的,但这个改变标志着它成为一个稳定的模块,可以用于生产。

Ada 2.0

Node.js v20带来了最新版本的URL解析器Ada。这次更新为URL解析带来了显著的性能提升,包括node:url中url.domainToASCII和url.domainToUnicode函数的改进。
Ada 2.0已经被整合到Node.js的代码库中,确保应用程序的所有部分都可以受益于性能的改进。此外,与其前身Ada 1.0.4相比,Ada 2.0具有显著的性能提升,并且还消除了对ICU的URL主机名解析要求。

Preparing single executable apps now requires injecting a Blob

构建单个可执行文件的应用程序现在需要注入一个由Node.js从JSON配置准备的Blob,而不是注入原始JS文件。这打开了将多个共存资源嵌入到SEA(单个可执行文件应用程序)中的可能性。

Web Crypto API

现在,Web Crypto API函数的参数将按照其WebIDL定义进行强制转换和验证,就像其他Web Crypto API实现一样。这进一步提高了与其他Web Crypto API实现的互操作性。

官方支持ARM64 Windows。

现在,Node.js包括ARM64 Windows二进制文件,允许在该平台上进行本地执行。MSI、zip/7z包和可执行文件可从Node.js下载站点上获取,与所有其他平台一样。CI系统已更新,并且现在在ARM64 Windows上完全测试所有更改,以防止回归并确保兼容性。

必须指定WASI版本。

现在,在调用new WASI()时,必须提供version选项,且它没有默认值。任何依赖于版本默认值的代码都需要更新,以请求特定版本。