Node.js 18.0.0 发布全解析:全局 fetch、内置测试运行器与 V8 10.1 的里程碑升级
Node.js 18.0.0 发布全解析全局 fetch、内置测试运行器与 V8 10.1 的里程碑升级【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org本篇文章以 Node.js 官网仓库中 v18.0.0 发布博客 为蓝本系统梳理 Node.js 18 首个 Current 版本带来的全部重大变更SEMVER-MAJOR、实验性新能力与工具链升级并对照 nodejs.org 站点源码说明发布博客是如何被自动生成、渲染与呈现的。读完本文你将掌握 v18 的关键能力取舍、破坏性变更清单、新全局 API 的启用方式以及发布公告背后的生产链路。一、版本背景与发布定位Node.js 18.0.0 于 2022 年 4 月 19 日发布版本策略为Current非 LTS由 Bethany Nicolle Griggs 撰写发布公告。该版本随附 npm 8.6.0、V8 10.1 引擎与 ICU 71.1并一次性引入了三项对整个生态影响深远的实验性能力全局可用的fetchAPI基于 undici内置测试运行器模块node:testWeb Streams API 全局对象。从发布博客的 frontmatter 可以看到该文档使用category: release与layout: blog-post元数据见 v18.0.0.md这意味着它会自动归入官网博客的 release 分类并采用博客文章布局渲染。在 Blog 布局 中博客分类标签包括all、announcements、release、vulnerability、migrations、events而 blog.ts 通过mapBlogCategoryToPreviewType将release直接映射为对应的预览类型使 v18.0.0 这类发布文章得以在博客列表与分页中正常展示。二、Deprecations and Removals五项破坏性变更v18.0.0 一口气完成了多项运行时废弃runtime deprecation与移除全部标记为SEMVER-MAJOR模块变更内容影响fs运行时废弃fs.write、fs.writeFileSync中的字符串强制转换传非字符串/ Buffer 参数将触发废弃警告PR #42607dns移除dns.lookup与dnsPromises.lookup的 options 类型强制转换非法 options 不再被静默纠正PR #41431process运行时废弃multipleResolves不推荐的 Promise 多次 resolve 事件监听被标记废弃PR #41896stream移除 thenable 支持依赖 thenable 语义的 stream 代码需迁移PR #40773tlstls.parseCertString进入生命周期终结EOL该 API 被彻底移除需改用querystring解析PR #41479值得留意的是fs的废弃属于运行时废弃而非静态废弃意味着只有实际以错误类型调用时才会在运行时输出警告这与 releaseData.mjs 中按发布计划计算的 Current / LTS / EOL 状态逻辑相互独立——废弃是 API 层面的信号而版本状态如 v18 后来进入 LTS则由getNodeReleaseStatus依据latest.lts.isLts与 EOL 日期自动判定。三、fetch (experimental)Node 原生 HTTP 客户端的新纪元v18.0.0 首次将实验性的fetchAPI 默认挂在全局作用域其实现基于 undici一个由 Node.js 贡献者社区为 Node 编写的 HTTP/1.1 客户端。发布博客给出了最简用法const res await fetch(https://nodejs.org/api/documentation.json); if (res.ok) { const data await res.json(); console.log(data); }通过该次添加以下全局对象一并可用fetch、FormData、Headers、Request、Response。如需关闭此实验特性可使用命令行标志node --no-experimental-fetch app.mjs从仓库源码可以印证 undici 的地位在 downloadsTable.mjs 与 index.mjs 中发布博客生成脚本本身就大量使用全局fetch拉取 changelog、作者信息、SHASUMS 与下载文件清单request()函数基于fetch实现。也就是说nodejs.org 站点自身的发布自动化工具链正是在 Node 18 引入的全局 fetch 之上构建的这为fetchAPI 提供了一份来自官方站点的自举式实践证据。四、HTTP Timeouts默认超时值与 DoS 防护v18.0.0 将http.Server的两个关键超时参数改为更安全的默认值server.headersTimeout解析器等待完整 HTTP 头部的最长时间默认60000 毫秒60 秒server.requestTimeout接收客户端完整请求的超时毫秒数默认300000 毫秒5 分钟。一旦超时到期服务器会直接以408 状态码响应不将请求转发给 request 监听器随后关闭连接。官方特别强调在未部署反向代理reverse proxy的部署场景下两个超时都必须设置为非零值以抵御潜在的拒绝服务Denial-of-Service攻击。相关实现由 Paolo Insogna 在 PR #41263 中重构完成。同一发布周期内另一个与 HTTP 网络栈强相关的破坏性变更是TCP noDelay 默认开启PR #42163SEMVER-MAJOR它改变了 Nagle 算法的默认行为对小包、低延迟场景的响应速度有直接提升。五、Test Runner 模块实验性内置 TAP 测试能力node:test模块用于创建输出TAP 格式测试结果的 JavaScript 测试且仅在node:scheme 下可用import test from node:test; 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); }); });这段代码展示了父测试与两个子测试subtest的组织方式——t.test()返回的 Promise 需要被await以保证父子测试的执行顺序。该模块由 Colin Ihrig 在 PR #42325 中引入同期还有支持only测试的 SEMVER-MINOR 提交PR #42514。从仓库的提交列表看module,repl: support node:-only core modulesPR #42325与test: add initial test module同批落地说明node:test与node:前缀约束是配套设计目的就是明确核心模块与第三方包的命名空间边界。六、Toolchain and Compiler Upgrades构建基线的整体抬升v18.0.0 对官方预编译二进制的构建基线做了显著调整Linux预编译二进制改为在 Red Hat Enterprise LinuxRHEL8 上构建兼容基于glibc 2.28 或更高版本的发行版例如 Debian 10、RHEL 8、Ubuntu 20.04macOS预编译二进制要求macOS 10.15 或更高版本AIX最低支持架构从 Power 7 提升至Power 8。两个重要限制32 位 Windows 预编译二进制暂不提供原因是构建 V8 依赖时存在问题官方计划在后续 V8 更新中恢复不再支持已停止维护的操作系统对于供应商计划在 2025 年 4 月前结束支持的系统如 2023 年 1 月结束的 Windows 8.1、2023 年 10 月结束的 Windows Server 2012 R2Node.js 18 的支持也会提前终止。这些变化在发布博客的 Semver-Major Commits 中均有对应提交例如build: bump macOS deployment target to 10.15、build: make x86 Windows support temporarily experimental、build: downgrade Windows 8.1 and server 2012 R2 to experimental、doc: update minimum glibc requirements for Linux与doc: update AIX minimum supported arch。与此同时NODE_MODULE_VERSION被提升到 108意味着原生模块必须针对新 ABI 重新编译。七、V8 10.1引擎与语言能力的同步V8 引擎更新至10.1属于 Chromium 101。与 Node.js 17.9.0 内置版本相比新增特性包括Array.prototype.findLast与findLastIndex数组方法Intl.LocaleAPI 的改进Intl.supportedValuesOf函数类字段class fields与私有类方法private class methods的初始化性能提升现已与普通属性存储一样快。此外v8.serialize(value)返回的序列化数据格式发生变化旧版 Node.js 无法反序列化新格式但 API 保持向后兼容仍可反序列化旧格式。这一细节对依赖v8.serialize做跨版本数据持久化的项目是重要的升级前检查点。八、Web Streams API实验性浏览器标准流式原语进驻全局Node.js 18 在全局作用域暴露了 Web Streams API 的实验性实现以下 API 无需import即可直接使用ReadableStream、ReadableStreamDefaultReader、ReadableStreamBYOBReader、ReadableStreamBYOBRequest、ReadableByteStreamController、ReadableStreamDefaultController、TransformStream、TransformStreamDefaultController、WritableStream、WritableStreamDefaultWriter、WritableStreamDefaultController、ByteLengthQueuingStrategy、CountQueuingStrategy、TextEncoderStream、TextDecoderStream、CompressionStream、DecompressionStream。配套的 SEMVER-MAJOR 提交是stream: expose web streams globals, remove runtime experimental warningPR #42225即这些全局对象默认暴露且不再打印运行时实验性警告但整体仍属实验特性。同时Blob已从实验状态毕业为全局对象PR #41270BroadcastChannel也在 worker 线程中升级为受支持supportedAPIPR #41271。九、Other Notable Changes 与提交清单解读除上述大项外本版还有一批值得关注的变更buffer将Blob暴露为全局对象并使其从实验状态毕业PR #41270child_process改进参数校验非法参数将被更早、更明确地拒绝PR #41305http默认启用 TCP noDelayPR #42163netserver.address()的family字段改为返回整数PR #41431workerBroadcastChannel暴露为全局并升级为受支持 APIPR #41271process禁止部分对process.env的Object.defineProperty()用法PR #28006urlIPv6 主机名中出现 NULL 字符时直接抛错PR #42313v8v8.writeHeapSnapshot()错误码统一且fopen失败时抛错PR #42577、#41373assert,util深比较时同步比较RegExp.lastIndexPR #41020clusterkill简化为直接调用process.killPR #34312stream新增writableAbortedSEMVER-MINORPR #40802并统一writableErrored与readableErrored属性PR #40799。发布博客将这些变更完整列为 Semver-Major、Semver-Minor、Semver-Patch 三个提交清单每个条目都附有 commit hash 与 PR 编号便于精确追溯。补丁级别的代表性改动包括升级 Acorn 至 8.7.0、ICU 至 71.1、npm 至 8.6.0、undici 至 5.0.0、eslint 至 8.13.0以及大量文档与测试完善。十、下载产物与 SHASUMS 校验v18.0.0 发布公告末尾附带了完整下载清单与 PGP 签名的 SHASUMS 校验文件。结合 downloadsTable.mjs 中的产物模板可以确认 v18.0.0 的预编译产物覆盖以下平台32 位 Windows 因 V8 构建问题暂缺Windows 64 位 Installer / Binarynode-v18.0.0-x64.msi、win-x64/node.exemacOS Installer 与 Apple Silicon / Intel 二进制node-v18.0.0.pkg、node-v18.0.0-darwin-arm64.tar.gz、node-v18.0.0-darwin-x64.tar.gzLinux x64 / PPC LE / s390x 二进制node-v18.0.0-linux-x64.tar.xz、node-v18.0.0-linux-ppc64le.tar.xz、node-v18.0.0-linux-s390x.tar.xzAIX 64 位node-v18.0.0-aix-ppc64.tar.gzARMv7 32 位与 ARMv8 64 位node-v18.0.0-linux-armv7l.tar.xz、node-v18.0.0-linux-arm64.tar.xz源码包node-v18.0.0.tar.gz。发布文件中的 SHASUMS 段以 PGP 签名包裹-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA256包含每个产物的 SHA-256 哈希。例如 Linux x64 二进制包node-v18.0.0-linux-x64.tar.xz的哈希为ffe94f0a3804e186b53f9480f4ef3a0c9ec450d7da45526438f6d37be9f4d22emacOS Apple Silicon 二进制包node-v18.0.0-darwin-arm64.tar.gz的哈希为01f2e194074e209340c7b7320bbb568829120c7747d469214ec76413d950bced注该哈希在原文中与 aix 条目为同一行前缀完整条目以发布文件为准。下载后可通过sha256sum file与公告中对应哈希比对并校验 PGP 签名来确保产物完整性。十一、发布博客在生产站点的生成与渲染链路发布博客并非纯手工撰写nodejs.org 仓库提供了完整的自动化生成脚本 scripts/release-post/index.mjs其工作流清晰可循指定版本通过node index.mjs [version]传入版本号缺省时从https://nodejs.org/dist/index.json自动获取最新版本拉取素材fetchDocs()并行执行五项任务——从 Node.js changelog 中解析对应版本段落fetchChangelog、从 GitHub API 获取作者姓名fetchAuthor、解析版本策略 Current / LTSfetchVersionPolicy、拉取 PGP 签名的 SHASUMSfetchShasums、逐个 HEAD 探测下载产物是否可用verifyDownloads不可用则标记*Coming soon*渲染模板使用 Handlebars 编译 template.hbs将 changelog 正文、下载文件列表与 SHASUMS 注入 frontmatterdate、category: release、title、layout: blog-post、author格式化与落盘经 Prettier 以 markdown parser 格式化后写入pages/en/blog/release/vversion.md若文件已存在且未加-f强制标志则拒绝覆盖。值得注意该脚本的request()与urlOrComingSoon()都建立在全局fetch之上——正是 v18 引入的能力支撑了官方站点发布工具的编写形成闭环。生成后的 MDX 文件在前端由 博客路由 读取basePage.getMarkdownContext()解析 frontmatter 与 Markdown 内容renderPage()依据context.frontmatter.layout此处为blog-post选择布局渲染该路由被标记为force-static并以revalidate 300周期性刷新缓存。文章中的Release /相关交互组件如 VersionDropdown则通过 mdx/components.mjs 注册由 releaseProvider 提供版本上下文——例如当用户选择 LTS 版本但当前路径是/download/current时会通过redirect跳转到对应语义路径。结语Node.js 18.0.0 是 Node 演进史上的关键一跃全局fetch让服务端不再依赖第三方 HTTP 客户端node:test开启了内置测试生态Web Streams 与 V8 10.1 则进一步拉近了 Node 与浏览器标准之间的距离。对于升级者而言本版本的 Semver-Major 清单fs 字符串强制转换废弃、stream thenable 移除、dns.lookup类型强制移除、tls.parseCertString移除等是需要优先排查的兼容性雷区而默认超时值、TCP noDelay 与构建基线的变化则直接影响生产部署规划。透过 nodejs.org 仓库的发布脚本与渲染链路你还能完整复现发布公告从 changelog 到官网页面的自动化过程为自有项目的版本公告体系提供参考范本。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

plugin-descriptor-patcher:IntelliJ 构建管线中 `META-INF/plugin.xml` 的 Go 化描述符补丁执行器

plugin-descriptor-patcher:IntelliJ 构建管线中 `META-INF/plugin.xml` 的 Go 化描述符补丁执行器

plugin-descriptor-patcher:IntelliJ 构建管线中 META-INF/plugin.xml 的 Go 化描述符补丁执行器 【免费下载链接】intellij-community IntelliJ IDEA & IntelliJ Platform 项目地址: https://gitcode.com/GitHub_Trending/in/intellij-community 导读 …

2026/9/20 17:34:02 阅读更多 →
Vue+Spring Boot二手商城实战:前后端分离与权限控制

Vue+Spring Boot二手商城实战:前后端分离与权限控制

简介:本资源是一份面向计算机专业本科生的毕业设计论文文档,聚焦大学生二手电子产品交易平台的系统化设计与实现,适用于Java Web开发、前后端分离项目实践及毕业论文参考场景。全文基于VueSpringBoot技术栈展开,涵盖平台需求分析、…

2026/9/21 9:52:40 阅读更多 →
C++算法从入门到工程实践:排序、查找、图论与动态规划选型指南

C++算法从入门到工程实践:排序、查找、图论与动态规划选型指南

1. 先把 C 算法的地图画出来C 算法这个词&#xff0c;在多数人的语境里其实混着两层含义&#xff1a;一层是数据结构与算法课上那套东西&#xff0c;排序、查找、图论、动态规划&#xff1b;另一层是 C 标准库<algorithm>里已经封装好的那批函数&#xff0c;sort、lower_…

2026/9/21 14:43:52 阅读更多 →

最新新闻

揭秘京东商城app源码:5步搞懂性能优化,从入门到精通

揭秘京东商城app源码:5步搞懂性能优化,从入门到精通

揭秘京东商城app源码:5步搞懂性能优化,从入门到精通 代码复制过来直接报错,断点打在哪儿都没反应,这种抓心挠肝的感觉太熟悉了。别急,今天咱们不整虚的,直接扒开 京东商城app…

2026/9/22 2:03:06 阅读更多 →
红轴和青轴选型避坑指南:5个致命误区与底层逻辑拆解

红轴和青轴选型避坑指南:5个致命误区与底层逻辑拆解

红轴和青轴选型避坑指南:5个致命误区与底层逻辑拆解 官方文档翻了三遍还是云里雾里?Cherry MX的规格表里那些“触觉反馈”、“段落感”术语,读起来像天书。别急,这篇避坑指南直接跳过废话,带你用底层逻辑把红轴和青轴的区别扒个底掉。不管你是…

2026/9/22 2:03:06 阅读更多 →
起点软件实战项目拆解 3步搞定从零搭建

起点软件实战项目拆解 3步搞定从零搭建

起点软件实战项目拆解 3步搞定从零搭建 看了一堆教程还是不会写项目?这是很多刚入行的开发者最真实的写照。视频跟着敲了一遍,关掉窗口脑子就空了,真正动手时连目录结构都理不清。其实问题不在于你不够努力,而在于你缺乏一个能跑通的 实战项目…

2026/9/22 2:03:06 阅读更多 →
论文出版费怎么算?3个实战项目对比让你不再被坑

论文出版费怎么算?3个实战项目对比让你不再被坑

论文出版费怎么算?3个实战项目对比让你不再被坑 官方文档翻了几百页,核心逻辑还是抓不住重点,这种折磨谁懂?很多开发者在接手涉及学术成果或技术白皮书发布的 实战项目…

2026/9/22 2:03:06 阅读更多 →
3个真实案例看懂中单惩戒ez从入门到精通

3个真实案例看懂中单惩戒ez从入门到精通

3个真实案例看懂中单惩戒ez从入门到精通 复制来的代码跑不通不知道怎么调?别慌,这种“看着对但就是报错”的坑,90%的新手都踩过。尤其是处理像 中单惩戒ez…

2026/9/22 2:03:05 阅读更多 →
手机盖板渲染原理图解:从像素到GPU的最佳实践

手机盖板渲染原理图解:从像素到GPU的最佳实践

手机盖板渲染原理图解:从像素到GPU的最佳实践 看了一堆教程还是不会写项目?这种无力感我太懂了。你盯着屏幕上的精美UI,心里却发慌:这玻璃质感、这光影反射,到底怎么算出来的?别急,今天咱们不整虚的,直接拆解 手机盖板…

2026/9/22 2:02:05 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事&#xff1a;用Flutter给OpenHarmony做一款游戏集合类的App&#xff0c;说白了就是把若干小游戏塞进一个壳里&#xff0c;用统一入口分发。这个方向本身不算新鲜&#xff0c;真正让我花了不少心思的&#xff0c;是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档&#xff0c;最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事&#xff1a;今天在表后面多加了两个空白行&#xff0c;明天给客户交稿前发现整个章节的编号全部错位&#xff0c;光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年&#xff0c;说实话&#xff0c;第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年&#xff0c;流量惨淡、功能臃肿、代码自己都懒得看第二遍之后&#xff0c;我才慢慢琢磨明白一个道理&#xff1a;第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →