查看原文
其他

前端快讯|Node.js 21 正式发布

小懒 FED实验室 2024-02-12
关注下方公众号,获取更多热点资讯

【前端快讯 10月18日】Node.js 21 正式发布,下周 Node.js 20 将进入 LTS 版本。

金秋十月是一年中最美好的时光,因为这意味着我们即将迎来新的 Node.js 主要版本和新的 LTS 版本。今天,Node.js 社区正式发布 Node.js 21,下周 Node.js 20 将升级为长期支持 (LTS)版本。这归因于 Node.js 社区有定义明确的发布流程。

做为全栈开发者,我们很期待 Node.js 21 的发布以及 Node.js 20 升级为 LTS,因为 Node.js 继续被得到大量使用,去年从 nodejs.org 获得了超过 13 亿次下载,这对寻求广泛使用且稳定的后端 JavaScript 运行时的人来说,它是最佳选择。

需要提醒的是,在 Node.js 发布过程之后,Node.js 21 将不会升级到 LTS,因为只有偶数版本才会升级到 LTS。尽管官方仅推荐和支持 LTS 版本应用于生产环境,但还是希望开发者尝试 Node.js 21 社区版本并提供有关新功能和特性的反馈,以帮助为后续版本变得更好。

下面来看看本次 Node.js 21版本的主要内容:

Node.js 21 - 有什么新变化?

自 20.0.0 发布以来,Node.js 21 已有超过 1153 次提交。话虽如此,许多工作都是在幕后修复或重构现有功能,因此本次发布的重点功能数量有限。其中一些有趣的功能包括:

Fetch 升级至稳定版本

在此版本中,Fetch API 已提升至稳定版本。这将继续推进在 Node.js 中启用 Web API 的进程,进一步简化在前端和后端运行的 JavaScript 的开发

实验性 WebSocket 客户端支持

新的 --experimental-websocket 标志启用了对浏览器兼容的 WebSocket 实现的支持。这也将继续推进在 Node.js 中启用 Web API 的进程,进一步简化在前端和后端运行的 JavaScript 的开发

对 ESM 更好默认值的实验支持

新的 --experimental-default-type 标志启用了更适合完全 ESM 实现的默认值。该项目将继续努力改善使用 ESM 的开发人员体验,同时保持与 CommonJS 的兼容性。其他方法也在研究中,例如在可能的情况下自动检测 ESM,同时找出 ESM 开发人员体验的最佳选项。

平台支持

与大多数主要版本一样,此版本更新了用于构建 Node.js 的平台和工具的最低支持级别。Node 的构建说明记录了这些新的最低级别。值得注意的是,macOS 的最低支持版本已增加到 11.0,并且放弃了对 Visual Studio 2019 的支持。

V8 JavaScript 引擎更新至 11.8

V8 JavaScript引擎作为执行JavaScript代码的环境,使其能够在多个平台上无缝运行。这消除了开发人员需要担心特定平台的具体细节,例如使用的操作系统(Linux、Windows、macOS)或底层硬件架构(x64、Arm或Power PC)。

Node.js 21 的初始版本将 V8 JavaScript 引擎更新至 11.8。您可以在v8.dev中阅读有关 V8 优化的一些最新信息。

npm 10.2.0

Node.js 21 将 npm 版本更新到了 10.2。您可以在https://github.com/npm/cli/releases中了解有关此版本npm的更多新功能。

更新了许多依赖项的版本

在过去的一年中,安全团队的成员致力于自动更新 Node.js 中使用的依赖项。这确保了Node.js 与其依赖项的最新版本保持同步。您可以根据此次发布中的 uvwasi、simduft、zilb、googletest、undici 和 ada 的更新查看这项工作的结果。

Node.js 20 升级为 LTS

随着下周 Node.js 20 升级到 LTS,它将可以在生产环境中使用。与每个版本一样,Node.js 带来的特性和功能使升级成为一个不错的选择。很高兴与大家分享 Node.js 20 几个亮点:

  • 实验性权限模型
  • 稳定的测试运行器
  • V8 JavaScript 引擎已更新至 11.3
  • 同步 import.meta.resolve()
  • 试验性单一可执行程序 (SEA)

实验性权限模型

Node.js v20 中引入的实验性权限模型是一项重要的新增功能,可让开发人员在执行过程中对特定资源的访问进行更多控制。

当安全性和资源使用情况非常重要时(如在生产环境中),这项新功能将大有裨益。

权限模型具有多种功能,包括限制对文件系统、child_process、worker_threads 和本地插件的访问。

开发人员可以使用 --allow-fs-read--allow-fs-write--allow-child-process 等标记来指定哪些资源可以访问。要激活这些标记,开发人员需要将 --experimental-permission 标记与所需权限结合使用。

稳定的测试运行器

Node.js v20 包含 test_runner 模块的稳定版本,使开发人员能够快速轻松地构建和运行 JavaScript 测试套件,而无需安装额外的依赖项。

稳定的测试运行程序现在包括多个构建块,例如 describeit/test 和 hooks,用于编写和构建测试文件,以及模拟、监视模式以及使用命令 node --test 并行运行多个测试文件的能力。

以下是如何使用测试运行器的示例:

import { test, mock } from 'node:test';
import assert from 'node:assert';
import fs from 'node:fs';

mock.method(fs, 'readFile'async () => "Hello World");
test('synchronous passing test'async (t) => {
  // This test passes because it does not throw an exception.
  assert.strictEqual(await fs.readFile('a.txt'), "Hello World");
});

更多可以参考小懒的这篇文章 Node.js 测试运行器 Test Runner 初探

V8 JavaScript 引擎更新至 11.3

为 Node.js 提供支持的V8 JavaScript 引擎已在 Node.js v20 中更新至版本 11.3。这带来了性能的提高并引入了新的语言功能。此更新的一些新功能包括:

  • String.prototype.isWellFormedtoWellFormed:这些方法对于确保正确的字符串格式特别有用。这有助于确保用户字符串输入采用正确的 UTF-16 格式,从而减少表情符号时代的错误。
  • 通过复制更改 Array 和 TypedArray 的方法:这对于创建数组的修改副本而不影响原始数据非常有用,这在您需要保留原始数据以进行比较或其他目的的情况下尤其相关。
  • 可调整大小 ArrayBuffer 和可增长 SharedArrayBuffer:提供更大的灵活性,允许更有效的内存分配。
  • 带有设置符号和字符串属性的 RegExp v 标志:添加正则表达式的功能。
  • WebAssembly 尾调用:提供了一种优化某些类型函数调用的方法。

这些更新展示了 Node.js 开发社区对提高性能和功能的持续承诺。

import.meta.resolve()

在 Node.js v20 中引入了 import.meta.resolve(),这使得编写位置不敏感的脚本变得更加容易。该函数同步返回,类似于浏览器行为,从而可以更有效地执行。

用户加载器解析挂钩仍然可以定义为异步函数,但 import.meta.resolve() 即使加载了异步解析挂钩,仍然会同步返回应用程序代码。

同步行为 import.meta.resolve() 允许更高效的代码执行,特别是在处理大量数据时。您可以根据您的偏好将解析挂钩定义为异步或同步函数。无论是否加载了异步解析挂钩,应用程序代码仍将同步执行。

实验性单一可执行应用程序 (SEA)

实验性单一可执行应用程序 (SEA) 是 Node.js v20 中引入的一项新功能,允许将应用程序与 Node.js 二进制文件捆绑在一起,使最终用户能够将其作为单个可执行文件分发和运行。

在 Node.js v20 中,构建单个可执行应用程序需要从 JSON 配置注入由 Node.js 准备的 blob,而不是注入原始 JS 文件。

Blob 是包含二进制数据的文件,在本例中是由 Node.js 准备的,并将其注入到二进制文件中。进行此更改是为了将多个共存资源嵌入到 SEA 中,从而开辟新的用例。

以下是sea-config.json文件的示例:


  "main""myscript.js"
  "output""sea-prep.blob" 
}

使用命令执行时 node --experimental-sea-config sea-config.json,blob 将写入 sea-prep.blob 文件,然后可以将其注入到二进制文件中。

性能

Node.js v20 对其运行时进行了重大改进,新成立的 Node.js 性能团队重新关注性能。这些改进包括对运行时核心部分的优化,例如 URL、fetch()EventTarget

其中一项显著的改进是将初始化 EventTarget 的成本降低了一半,从而加快了对使用 EventTarget 的所有子系统的访问速度。此外,还利用 V8 Fast API 调用提高了 URL.canParse() 和计时器等 API 的性能。

另一个具体的变化是包含了 Ada 的更新版本 2.0,这是一个用 C++ 编写的快速且符合规范的 URL 解析器。

以上就是本次版本更新的全部内容,欢迎点赞、关注、分享

大家都在看
继续滑动看下一个

前端快讯|Node.js 21 正式发布

小懒 FED实验室
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存