新闻详情

新闻详情

首页 / 资讯中心 / 详情

Node.js 18 版本发布全解析:全局 fetch、node:test 原生测试模块与 V8 10.1 核心特性实战指南

发布时间:2026/9/17 18:19:31来源:尧图网络
Node.js 18 版本发布全解析:全局 fetch、node:test 原生测试模块与 V8 10.1 核心特性实战指南
Node.js 18 版本发布全解析全局 fetch、node:test 原生测试模块与 V8 10.1 核心特性实战指南【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org本篇技术指南基于 nodejs.org 仓库中的官方发布公告 v18-release-announce.md 编写系统梳理 Node.js 18代号 Hydrogen的核心新特性全局可用的 fetch 与 Web Streams API、实验性的node:test核心测试模块、工具链升级以及构建期 user-land snapshot 等并结合作者所在仓库nodejs.org 网站项目的源码实现补充其在真实工程中的呈现方式。读者读完本文后将掌握 Node.js 18 各实验特性的启用/禁用方式、node:test的编写范式、自定义 V8 startup snapshot 的构建流程以及 V8 10.1 带来的数组与 Intl 新能力。发布概况从 Current 到 LTS Hydrogen2022 年 4 月 19 日Node.js 项目正式发布 Node.js 18该版本初期将取代 Node.js 17 成为 Current 发布线。按照既定的发布节奏Release ScheduleNode.js 18 将作为 Current 版本持续 6 个月随后在 2022 年 10 月被提升为 Long-term SupportLTS长期支持版本并获得代号Hydrogen。Node.js 18 的官方支持周期将持续到2025 年 4 月。本次版本的核心亮点可概括为三件事V8 JavaScript 引擎升级至10.1全局fetchAPI 默认启用实验性新增核心test runner模块实验性。在 nodejs.org 仓库中本次发布公告存放在博客的announcements分类下v18-release-announce.md而同一系列的版本发布记录则保存在 v18.0.0.md 等 release 文档中包含该版本完整 commit 列表可作为查阅底层变更的权威来源。全局 fetch API浏览器兼容的第一步Node.js 18 最受瞩目的变化是实验性的全局 fetch API 默认可用。该实现来自 undici并受到 node-fetch 的启发后者最初基于 undici-fetch。实现力求最大程度贴近规范spec-compliant但部分需要浏览器环境的能力被有意省略。启用状态与开关该 API 默认启用但处于实验阶段。若需关闭可通过命令行标志--no-experimental-fetch禁用。官方 API 将保持实验性直到测试覆盖更充分、并确认已实现规范中尽可能多的部分。通过该特性全局暴露的对象fetchFormDataHeadersRequestResponse用法示例文档原文示例const res await fetch(https://nodejs.org/api/documentation.json); if (res.ok) { const data await res.json(); console.log(data); }该fetch()实现由 Robert Nagy、Ethan Arrowood 和 Matteo Collina 主导开发并由 Michaël Zasso 合入 Node.js 核心PR #41811。实战提示在启用实验性特性的版本中若你的应用同时使用node-fetch或 axios 等第三方 HTTP 客户端可先在小规模模块中试用全局 fetch验证与既有代码的兼容性再决定是否全局替换。由于res.json()返回的是真实可读流解析结果对内存敏感的大响应场景需配合下文的 Web Streams 能力评估流式消费方案。Web Streams API流式处理的全局化Node.js 18 在全局作用域上暴露了实验性的 Web Streams API 实现。这意味着以下 API 现在全局可用ReadableStream、ReadableStreamDefaultReader、ReadableStreamBYOBReader、ReadableStreamBYOBRequest、ReadableByteStreamController、ReadableStreamDefaultController、TransformStream、TransformStreamDefaultController、WritableStream、WritableStreamDefaultWriter、WritableStreamDefaultController、ByteLengthQueuingStrategy、CountQueuingStrategy、TextEncoderStream、TextDecoderStream、CompressionStream、DecompressionStream。这一批全局对象让 Node.js 开发者无需再依赖stream/web子路径导入即可在浏览器与 Node.js 之间共享同一套流处理心智模型为跨端代码复用扫清了障碍。该特性由 James SnellPR #39062与 Antoine du HamelPR #42225贡献。更多全局 APIBlob 与 BroadcastChannel除了 fetch 与 Web StreamsNode.js 18 还新增了两个不再标记为实验性的全局 APIBlob—— 二进制大对象可用于表示不可变的原始数据对应 Node.js 文档中buffer模块的class BlobBroadcastChannel—— 继承自EventTarget允许同一工作线程worker thread上下文间进行消息广播。这两个 API 的全局化由 James Snell 贡献PR #41270 与 #41271它们的稳定化意味着开发者可以在不引入任何依赖的情况下直接使用这些标准 Web 平台能力。node:test 核心测试模块TAP 格式的原生测试方案Node.js 18 引入了实验性的核心测试模块node:test用于以TAPTest Anything Protocol格式输出测试结果从而减少对第三方测试框架的依赖。导入方式必须使用node:前缀导入核心模块import test from node:test;文档特别强调node:前缀表示加载核心模块若省略前缀直接import testNode.js 将尝试加载一个用户态userland模块。这一约定在 Node.js 核心模块体系中是通用的加载规则。父测试 子测试示例文档原文示例test(top level test, async t { await t.test(subtest 1, t { assert.strictEqual(1, 1); }); await t.test(subtest 2, t { assert.strictEqual(2, 2); }); });上述示例展示了测试的组织方式外层test()通过异步回调参数t上的t.test()挂载子测试assert仍使用 Node.js 内置断言模块测试结果统一以 TAP 格式输出到标准输出。该模块由 Colin Ihrig 贡献PR #42325。实战提示node:test与node:assert配合即可覆盖绝大多数单元测试场景。从源码结构看该模块在后续版本中持续演进社区常见的做法是用node --test配合test/目录约定自动发现测试文件。在 Node.js 18 上评估测试方案时可将其作为轻量选项与 mocha/jest 对比验证。工具链与编译器升级Node.js 为多个平台提供预编译二进制。每个主版本发布时项目都会重新评估并酌情提高最低工具链要求。Node.js 18 的具体变化如下Linux预编译二进制改为在 Red Hat Enterprise LinuxRHEL8 上构建兼容基于glibc 2.28 或更高版本的 Linux 发行版例如 Debian 10、RHEL 8、Ubuntu 20.04macOS预编译二进制要求macOS 10.15 或更高版本AIX最低支持架构从 Power 7 提升至Power 832 位 Windows由于 V8 依赖在 Node.js 中的构建问题32 位 Windows 预编译二进制初期暂不提供官方希望在后续 V8 更新中恢复。此外Node.js不支持在供应商已停止维护的操作系统上运行。对于供应商计划在 2025 年 4 月之前结束支持的操作系统如 Windows 8.1 于 2023 年 1 月、Windows Server 2012 R2 于 2023 年 10 月结束支持Node.js 18 的支持也会在更早的日期提前终止。完整的受支持工具链与编译器清单以官方 BUILDING.md 中 Supported Platforms 一节为准。该部分由 Richard LauPR #42292、#42604、#42659与 Michaël ZassoPR #42105、#42666贡献ARMv7 交叉编译器升级由 Rod Vagg 完成。构建期 user-land snapshot加速应用启动的实验特性从 Node.js 18.0.0 起开发者可以使用 configure 脚本的--node-snapshot-main标志构建一个携带自定义V8 startup snapshot的 Node.js 二进制。其核心思路是在构建期执行一次入口脚本将初始化后的堆状态序列化并嵌入二进制运行时直接反序列化该快照从而跳过模块的解析与执行显著缩短应用启动时间。构建流程文档原文示例$ cd /path/to/node/source # 指定快照入口点例如一个 UMD 模块 # 此处以 marked markdown 渲染器为例入口应初始化渲染器并存入 globalThis $ ./configure --node-snapshot-mainmarked.js # 构建二进制 $ make node消费快照的应用代码// render.js // globalThis.marked 可以从内嵌快照中反序列化得到 // 无需再次解析和执行该模块从而改善启动时间。 const html globalThis.marked(process.argv[1]); console.log(html);执行生成的二进制$ out/Release/node render.js test.md后续演进方向截至发布公告时的计划提供 userland snapshot 的 JS APIissue #42617使二进制无需额外运行时入口脚本即可执行最终演变为包含用户应用的单文件可执行程序将该特性改为运行时标志PR #38905使快照可以在不借助编译器的情况下生成与加载。该特性由 Joyee Cheung 贡献PR #42466。实战提示该特性适合对启动延迟敏感的应用如 Serverless 冷启动、CLI 工具。需要注意的是快照中序列化的是构建期堆状态因此入口脚本中的初始化逻辑必须无副作用依赖运行时环境且模块加载器必须支持构建期执行。在 Node.js 18 上评估该方案时建议先以纯函数式初始化模块做概念验证再迁移到真实业务入口。V8 10.1数组、Intl 与类字段性能Node.js 18 将 V8 引擎升级至10.1属于 Chromium 101 的一部分。相比 Node.js 17.9.0 内置的版本主要新特性包括数组新增findLast()与findLastIndex()方法支持从数组末尾向前查找元素Intl.LocaleAPI 的改进如 locale 扩展支持新增Intl.supportedValuesOf函数用于枚举某个 Intl 能力支持的值如日历、编号系统等类字段class fields与私有类方法private class methods的初始化性能显著提升现已与普通属性存储一样快。这些 V8 层面的能力由 Michaël Zasso 通过 PR #42657 合入。对于开发者而言findLast直接消除了先reverse()再find()的惯用写法而Intl.supportedValuesOf则让国际化能力探测变得更加可靠。ECMAScript 模块进展与其他项目动态虽然并非 Node.js 18 新增但项目在 ECMAScript 模块ESM实现上持续取得了里程碑进展主要包括实验性支持JSON Import Assertions对应 TC39 的 import-assertions 提案JSON 模块取消标志位仍为实验性实验性支持HTTPS 与 HTTP importsNode.js Loaders 团队持续开发ECMAScript Modules Loaders实现。与此同时项目持续推进Next 10倡议反思 Node.js 第一个十年的成功经验并为下一个十年设定方向。围绕已确认的技术优先级社区已举行多次会议覆盖 Modern HTTP、WebAssembly、TypeScript 等主题后续的 ECMAScript modules 与 Observability 议题计划在 OpenJS World 大会的 collaborator summit 中讨论。在 nodejs.org 仓库中的呈现与关联工程本文所述的发布公告本身就是 nodejs.org 网站仓库中的一份内容文档理解其在前端工程中的处理链路有助于开发者掌握 Node.js 官方博客的内容生产机制1. Frontmatter 元数据驱动公告文件顶部声明了date、category: announcements、title、layout: blog-post等字段。仓库中定义了对应的类型约束frontmatter.ts字段包括layout、title、labels、date、author、category等。2. 博客数据生成构建期通过 generate.mjs 流式读取pages/en/blog目录下所有 Markdown 文件用 gray-matter 解析 frontmatter得到每篇博文的title、author、date、category并自动生成[category, year-YYYY, all]三类标签以及基于分类 文件名的 slug如/blog/announcements/v18-release-announce。数据最终写入public/blog-data.json见 index.mjs。3. 页面渲染路由博客动态路由 page.tsx 负责将/blog/{category}/{post}路径映射到对应 Markdown 文件并渲染为 React 页面通过 frontmatter 中的layout字段决定使用博客文章布局还是分类布局。4. 与下载页面的联动Node.js 18 及其后续版本可直接在官方下载页获取。下载页 current.mdx 中的版本下拉、操作系统下拉、安装方式等交互组件会关联到对应版本的 release blog 文章与 changelog。仓库中的 BlogPostLink.tsx 组件即负责根据当前选中版本动态生成指向/blog/release/{version}的链接从源码结构看这正是发布公告正文中发布文章包含完整 commit 列表这一承诺在前端的具体实现。升级建议与行动号召官方在公告中明确呼吁社区积极试用 Node.js 18并通过测试自身应用与模块来确保项目与最新 Node.js 变更的兼容性。与此同时Node.js 12 将于 2022 年 4 月进入 End-of-Life官方建议仍停留在 Node.js 12 的团队尽快规划升级至 Node.js 14LTS或 Node.js 16LTS。针对不同场景本文给出如下落地建议新项目可直接以 Node.js 18 为基线采用全局 fetch 与node:test搭建极简依赖的 HTTP 客户端与测试体系存量项目先评估工具链兼容性glibc 2.28、macOS 10.15、AIX Power 8再逐步启用全局 fetch注意 32 位 Windows 二进制缺失对发布流水线的影响性能敏感项目关注 V8 10.1 的类字段性能提升并评估构建期 user-land snapshot 对启动时间的优化收益。Node.js 18 的支持将持续至 2025 年 4 月其作为 Hydrogen LTS 版本的生命周期覆盖了大量生产环境的长期维护窗口是值得认真评估与规划迁移的重要版本节点。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

零基础选AI工具的3个关键问题决策法 2026/9/17 18:58:37

零基础选AI工具的3个关键问题决策法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
ROS2 Ubuntu安装教程:版本对应、apt源、环境变量与验证 2026/9/17 18:58:37

ROS2 Ubuntu安装教程:版本对应、apt源、环境变量与验证

1. 先别急着敲apt:ROS2与Ubuntu的版本对应关系ROS2在Ubuntu中安装这件事,看起来只是几条apt命令,但真正上手时,版本对应、软件源、环境变量这三关就能让不少人反复重装系统。我见过太多刚接触机器人开发的朋友,兴冲冲地…

阅读更多 →
CiA402伺服协议详解:状态机、对象字典与多模式切换实战 2026/9/17 18:58:37

CiA402伺服协议详解:状态机、对象字典与多模式切换实战

伺服调试这行干久了,会发现一个挺有意思的现象:很多人能把 CANopen 的报文收发写得明明白白,SDO 读写、PDO 映射、心跳、NMT 状态机这些玩得挺溜,可一旦要用 CiA402 去驱动一台真正带轴的伺服,就开始卡壳——使能不了、…

阅读更多 →
超薄设备开关机电路极简设计:无需MCU的25nA方案 2026/9/17 18:58:37

超薄设备开关机电路极简设计:无需MCU的25nA方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
UL 943-2018 GFCI安规设计与型式试验实战指南 2026/9/17 18:58:37

UL 943-2018 GFCI安规设计与型式试验实战指南

简介:本资源为美国UL认证机构发布的最新版《UL 943-2018 Ground-Fault Circuit-Interrupters》安全标准全文PDF,面向电气工程师、产品认证人员、GFCI研发与测试技术人员及高校相关专业师生,用于指导漏电保护断路器的设计合规性验证、型式试验…

阅读更多 →
CMDB模型设计:用PostgreSQL实现IT资产语法规则 2026/9/17 18:55:36

CMDB模型设计:用PostgreSQL实现IT资产语法规则

简介:本资源是一份聚焦CMDB模型设计核心方法论的深度技术文档,面向ITSM系统架构师、运维平台开发者及配置管理(CMDB)实施工程师,解决企业级CMDB建模缺乏结构化指导、类与关系设计随意、分类体系不严谨等落地难题。文档…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞