ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Node.js 16.15.0 (LTS) 版本解读:实验性 fetch API 落地与 stream 工具方法矩阵

Node.js 16.15.0 (LTS) 版本解读:实验性 fetch API 落地与 stream 工具方法矩阵 Node.js 16.15.0 (LTS) 版本解读实验性 fetch API 落地与 stream 工具方法矩阵【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org本指南基于 nodejs.org 官方仓库中的 v16.15.0 发布说明 撰写系统梳理这一 LTS 版本的核心变更--experimental-fetch实验标志带来的 fetch 全家族全局对象、crypto / ESM / stream / node-api 等模块的 SEMVER-MINOR 新特性以及伴随的弃用与构建调整。读者将了解每个特性的开启方式、使用边界并掌握如何在仓库中复现发布说明的生成流程与下载校验方法。版本概览一次面向 LTS 线的功能聚合v16.15.0 于 2022 年 4 月 27 日发布属于 Node.js 16 主版本的 LTS 序列frontmatter 中标明category: release、layout: blog-post。它的意义在于一批在 Current 版本中打磨过的能力被汇聚进 LTS 线其中最具历史意义的是内置fetchAPI 的首次实验性引入它开启了 Node.js 无需第三方依赖即可发起 HTTP 请求的新时代。在 nodejs.org 仓库中每个版本的 LTS / Current 状态并非硬编码而是由 releaseData.mjs 动态判定若版本已过eol日期则标记为EOL否则看最新版本是否isLts两者皆非则为Current。这一逻辑被 VersionDropdown 等下载页组件消费用于在下拉框中展示每个主版本对应的徽标。核心亮点实验性 fetch API开启方式与全局对象v16.15.0 为 Node.js 带来了实验性的 fetch API 支持。启用方式是在启动脚本时追加标志node --experimental-fetch app.js该标志会向全局作用域安装五个对象fetch—— 发起请求的核心函数签名与浏览器一致fetch(input, init)返回 Promise Request—— 请求对象可描述 URL、方法、请求头与请求体Response—— 响应对象提供ok、status、headers以及json()、text()、arrayBuffer()等消费方法Headers—— 大小写不敏感的请求/响应头容器FormData—— 用于multipart/form-data编码的键值对集合便于文件上传与表单提交实现路径与版本内 PR从本发布说明的 Commits 与 Notable changes 可还原完整实现链路(SEMVER-MINOR) add fetchPR #41749—— 引入fetch、Request、Response、Headers全局对象实现位于lib层且内部对 fetch 相关全局对象的使用做了严格限制见 commit restrict usage of fetch related globals in core internals(SEMVER-MINOR) add FormData global when fetch is enabledPR #41956—— 仅在开启 fetch 时同时注入FormData全局对象deps 升级 undici—— 本版本连续更新 undici 到 5.0.0PR #42583undici 是 Node.js 内置 fetch 的底层 HTTP 客户端实现使用示例与默认关闭说明// 运行node --experimental-fetch example.mjs const response await fetch(https://example.com/api); console.log(response.ok); // true console.log(response.status); // 200 console.log(await response.text()); const form new FormData(); form.append(key, value); const upload await fetch(https://example.com/upload, { method: POST, body: form, });需要注意两个边界默认关闭fetch 全局对象默认不安装必须显式携带--experimental-fetch标志否则fetch is not defined。发布说明的测试条目check that fetch globals are disabled by default专门验证了这一点。实验性API 形态与行为在后续版本可能调整生产环境依赖该 API 前应跟踪其稳定性演进后续 Node 18 才将 fetch 标记为稳定并在默认开启。其他 Notable Changes 逐项解析cryptoKeyObject.prototype.equalsSEMVER-MINORcrypto.KeyObject新增实例方法equals(otherKeyObject)用于比较两个密钥对象的内部内容是否一致而不是比较引用。其实现伴随对密钥指纹计算AddFingerprintDigest、椭圆曲线名称解析GetCurveASN1Name/GetCurveNistName等内部函数的重构与清理是本版本 crypto 模块健壮性提升的一部分。此外本版本还通过 commit expose Web Crypto API on the global scopePR #41938推进了 Web Crypto 全局化并修复了auth tag length校验、fingerprint字符串长度计算等问题。esm网络模块导入SEMVER-MINOR在标志控制下ESM 加载器新增对远程模块的支持通过https协议从远端加载模块通过http协议在本地加载模块对应实现还包含多项配套修复网络导入的 base URL 解析PR #42131、https 场景下相对导入的修复PR #42119、type: module下无扩展名错误的可操作提示PR #42301以及加载器对符号链接文件的 ESM 解析修复PR #42197。moduleESM JSON 模块取消标志SEMVER-MINORimport data from ./data.json with { type: json }这类 JSON 模块导入不再需要实验标志即可使用PR #41736这是对 Node 17 以来 JSON 模块实验的收尾动作之一。node-api新增node_api_symbol_for()SEMVER-MINOR面向原生插件的 Node-API 层新增node_api_symbol_for()允许原生模块通过描述符创建或查找全局符号注册表中的 Symbol同时修复了node_api_get_module_file_name的 URL 返回问题。stream迭代辅助方法矩阵SEMVER-MINOR本版本为stream.Readable批量新增了可读流辅助方法均以 SEMVER-MINOR 形式进入 LTS 线方法说明PRforEach对流中每个 chunk 执行回调#41445toArray将流中所有 chunk 收集为数组#41553some/every类数组的谓词判断是否存在/是否全部满足条件#41573reduce归约聚合#41669flatMap先映射再拍平一层#41612drop/take跳过前 N 个 / 只取前 N 个 chunk#41630asIndexedPairs输出[index, chunk]对#41681配套实现保证了迭代辅助方法使用同步错误校验PR #41652并增加了forEach的测试覆盖PR #41937。这让流式数据的声明式处理能力大幅接近数组 API。process弃用multipleResolves事件process对象上的multipleResolves事件被标记为弃用。该事件用于监测 Promise 被多次 resolve/reject 的情况弃用后仍会触发但会输出弃用警告。fs 与 doc写入字符串强制转换弃用文档层明确弃用fs.write、fs.writeFileSync等 API 对非 Buffer/Uint8Array 数据的字符串强制转换行为PR #42149建议显式传入Buffer或Uint8Array以避免隐式编码导致的跨平台不一致。build移除 x32 架构支持构建系统移除了损坏的 x32 架构支持PR #41905x32 ABI 用户需要改用其他架构的二进制。同时构建系统新增--v8-enable-hugepage标志PR #41487供需要大页内存优化的场景使用。Commits 深度浏览值得关注的其余变更发布说明中约 250 条 commit 除上述特性外还有以下高价值变更buffersubarray与slice互为别名PR #41596并弃用buffer.slice引导使用语义更清晰的subarray提升 Blob 读取性能PR #42117fscp/cpSync支持复制相对符号链接PR #41819修正fs.read的默认length参数行为PR #40349workergetEnvironmentData/setEnvironmentData从实验转为正式 APIPR #41272http通过perf_hooks追踪 HTTP 客户端请求PR #42345netnet.Socket与net.Server新增构造选项PR #41310cluster尊重 worker 设置的 listen backlogPR #41623depsnpm 升级至 8.5.5nghttp2 升级至 1.47.0undici 升级至 5.0.0src允许在环境初始化阶段阻止 Inspector 启动PR #35025errorsdebug 场景下不再访问Error.stack避免额外开销PR #42096完整清单可在 v16.15.0.md 的 Commits 章节查阅每条均标注了所属模块、PR 编号与提交哈希。发布说明的生成机制仓库内的自动化管线nodejs.org 仓库并非手工维护这 300 余行的发布文档而是通过 release-post 生成器 自动化拼装。其运行方式为node apps/site/scripts/release-post/index.mjs 16.15.0 # 或省略版本号自动抓取 nodejs.org/dist/index.json 中的最新版本执行流程如下fetchChangelog从上游 CHANGELOG 中按a id16.15.0/a锚点截取对应版本章节fetchVersionPolicy从章节标题形如## 2022-04-27, Version 16.15.0 Gallium (LTS)中解析出版本策略得到LTS标记fetchAuthor解析发布者 GitHub 登录名并拉取作者全名即本文档 frontmatter 中的author: Danielle AdamsfetchShasums拉取官方 SHASUMS256.txt.asc 签名文件verifyDownloads通过 HEAD 请求逐条验证 downloadsTable.mjs 生成的下载地址是否有效最终由 template.hbs 渲染为与本文档同构的 Markdown写入apps/site/pages/en/blog/release/vX.Y.Z.md再经 Prettier 格式化下载清单同样由 downloadsTable.mjs 程序化生成模板 URL 中的%version%被实际版本号替换并根据 semver 范围做平台裁剪——例如 16.0.0才包含 macOS Apple Silicon 二进制 23.0.0才移除 32 位 Windows 产物v16.15.0 因此在列表中保留了完整的 Windows x86/x64、macOS Intel/Apple Silicon、Linux x64/PPC LE/s390x、AIX、ARMv7/ARMv8 以及源码包条目。下载清单与校验各平台分发文件v16.15.0 官方分发的完整下载清单如下与发布说明原文一致Windows 32-bit Installer:https://nodejs.org/dist/v16.15.0/node-v16.15.0-x86.msiWindows 64-bit Installer:https://nodejs.org/dist/v16.15.0/node-v16.15.0-x64.msiWindows 32-bit Binary:https://nodejs.org/dist/v16.15.0/win-x86/node.exeWindows 64-bit Binary:https://nodejs.org/dist/v16.15.0/win-x64/node.exemacOS 64-bit Installer:https://nodejs.org/dist/v16.15.0/node-v16.15.0.pkgmacOS Apple Silicon 64-bit Binary:https://nodejs.org/dist/v16.15.0/node-v16.15.0-darwin-arm64.tar.gzmacOS Intel 64-bit Binary:https://nodejs.org/dist/v16.15.0/node-v16.15.0-darwin-x64.tar.gzLinux 64-bit Binary:https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-x64.tar.xzLinux PPC LE 64-bit Binary:https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-ppc64le.tar.xzLinux s390x 64-bit Binary:https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-s390x.tar.xzAIX 64-bit Binary:https://nodejs.org/dist/v16.15.0/node-v16.15.0-aix-ppc64.tar.gzARMv7 32-bit Binary:https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-armv7l.tar.xzARMv8 64-bit Binary:https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-arm64.tar.xzSource Code:https://nodejs.org/dist/v16.15.0/node-v16.15.0.tar.gz其余发布文件位于https://nodejs.org/dist/v16.15.0/API 文档位于https://nodejs.org/docs/v16.15.0/api/。SHASUMS 与 PGP 签名校验发布说明附带了官方签名的 SHASUMS 文件PGP 签名 SHA256 哈希。建议下载二进制后立即校验完整性防止文件被篡改# 下载对应平台的产物与官方校验文件后 shasum -a 256 node-v16.15.0-linux-x64.tar.xz # 比对结果是否等于发布说明中对应行的哈希值 # 若本地安装 gpg可进一步验证签名文件的来源可信性 gpg --verify SHASUMS256.txt.asc以下为 v16.15.0 官方 SHASUMS 完整内容节选关键平台完整清单见 v16.15.0.md237a2b77ef1ec74343329c8c701d0f41feb946ede0a2cbc7292175b34cc638f6 node-v16.15.0-aix-ppc64.tar.gz ad8d8fc5330ef47788f509c2af398c8060bb59acbe914070d0df684cd2d8d39b node-v16.15.0-darwin-arm64.tar.gz e0b0a2292179ab855357cefa704f797d7853b569f2d66bb7c313dd5cb36e063b node-v16.15.0-headers.tar.gz d1c1de461be10bfd9c70ebae47330fb1b4ab0a98ad730823fb1340e34993edee node-v16.15.0-linux-x64.tar.gz 38e041b7249afb331663613f860b84b51852efa02b4ebff852f9610bef680d7d node-v16.15.0.tar.gz 7c67bf60fd785fdcc9daf8c7ed19f15affb8d266121ef387efc678069bb78fb5 node-v16.15.0-win-x64.7z d21fbd61cdd1dda49159b86967df01fed182de19c227b00f1841c4c374f5567f node-v16.15.0-x64.msi发布信息在前端页面的呈现nodejs.org 网站将这类发布说明与下载页深度联动BlogPostLink 根据当前选中的版本动态拼接/blog/release/v16.15.0链接让下载页用户一键跳转到对应版本的发布博客ChangelogLink 基于BASE_CHANGELOG_URL与版本号生成 CHANGELOG 外链DownloadLink 复用全局下载逻辑按当前 release 上下文渲染对应安装包按钮VersionDropdown 从ReleasesContext读取由 releaseData.mjs 生成的数据展示每个版本的versionWithPrefix形如v16.15.0与状态徽标并在 LTS 与 Current 路由间自动重定向小结v16.15.0 作为 LTS 线的一次重要聚合确立了后续 Node.js 内置 HTTP 客户端的形态--experimental-fetch标志 全局fetch/Request/Response/Headers/FormData同时通过 stream 的forEach/toArray/some/every/reduce/flatMap等方法补齐了流式数据处理能力配合 ESM 网络导入、JSON 模块去标志、KeyObject.prototype.equals等能力为开发者提供了一套覆盖面极广的运行时增强。理解这类发布说明的结构——Notable changes、Commits、下载清单、SHASUMS——也能帮助你快速定位任意 Node.js 版本的变更全貌并在 nodejs.org 仓库中借助自动化脚本随时复现发布文档的生成过程。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表