资讯动态

Node.js 19.8.0 (Current) 发布解析:八项新特性、底层实现与下载校验指南

发布时间:2026/9/18 20:56:28 来源:尧图企业网站定制
Node.js 19.8.0 (Current) 发布解析八项新特性、底层实现与下载校验指南【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.orgNode.js v19.8.0 于 2023 年 3 月 14 日作为 Current 版本线发布是本仓库 v19.8.0 发布公告 记录的一次功能型迭代共引入 8 项 SEMVER-MINOR向后兼容的新增能力变更覆盖buffer、events、AsyncLocalStorage、File-backed Blob、TLS 自动 DHE、URLSearchParams.size、WASI 版本参数与 worker 名称支持。读完本文你将掌握这些新 API 的具体用法与底层原理、v19.8.0 全量变更清单以及如何核验官方二进制包的完整性。一、发布概况公告如何进入仓库v19.8.0 发布于 2023-03-14公告作者为 Michaël Zasso属于Current版本线非 LTS。它的发布公告以 Markdown 形式存放在 apps/site/pages/en/blog/release/v19.8.0.md同目录下共收录了从 v0.10.0 到当前的全部历史版本公告如v19.7.0.md、v19.8.1.md等。这些公告并非手工撰写而是由仓库内的 scripts/release-post/index.mjs 脚本自动生成的。该脚本的运行流程可以梳理为拉取素材分别从官方 changelogCHANGELOG_V19.md提取本版本的提交区间、从SHASUMS256.txt.asc拉取 PGP 签名校验文件、从发布索引获取作者信息并解析版本策略Stable / Current / LTS校验下载通过verifyDownloads()对下载表中的每个二进制执行 HEAD 请求不存在的产物会被标记为*Coming soon*渲染成文使用 Handlebars 模板 template.hbs 拼接正文再经 Prettier 格式化后写入apps/site/pages/en/blog/release/vX.md。在网站前端这些公告通过 layouts/Post.tsx 布局渲染读取 frontmatter 的标题、作者、分类并在博客列表中以 BlogPostCard 卡片形式展示。因此本文中出现的每一条 commit 与下载链接在仓库中都有对应的生成逻辑与原始数据可供溯源。值得关注的是v19.8.0 发布后的次日2023-03-15即发布了 v19.8.1其中唯一内容就是回滚 v19.8.0 中vm.compileFunction的一个内存泄漏修复——因为该修复引入了应用程序崩溃。这提醒我们发布公告中的每个提交都经过真实场景检验跟进补丁版本同样是版本管理的常态。二、八项 Notable Changes 逐一详解v19.8.0 的显著变更全部标注为SEMVER-MINOR即在不破坏现有 API 的前提下新增能力。下面按模块逐一展开。1. buffer新增Buffer.copyBytesFrom(...)#46500commit 2fece54ca1 - (SEMVER-MINOR) buffer: add Buffer.copyBytesFrom(...)该 API 允许从任意 typed array 中拷贝字节生成一个新的Buffer避免与底层内存共享。典型用法const { Buffer } require(node:buffer); const uint8 new Uint8Array([104, 101, 108, 108, 111]); const buf Buffer.copyBytesFrom(uint8); console.log(buf.toString()); // hello // 修改副本不会影响原始 typed array buf[0] 0; console.log(uint8[0]); // 104与Buffer.from(uint8)的差异在于Buffer.from在传入 typed array 时会复用其底层ArrayBuffer共享内存、零拷贝而copyBytesFrom明确执行拷贝适合需要隔离数据的场景。2. eventslistenerCount新增listener参数#46523commit 2eb887549a - (SEMVER-MINOR) events: add listener argument to listenerCountEventEmitter.listenerCount(eventName[, listener])现在可以传入第二个参数精确统计特定回调函数被注册的次数而不是整个事件名的监听器总数const { EventEmitter } require(node:events); const emitter new EventEmitter(); const onData () {}; emitter.on(data, onData); emitter.on(data, onData); emitter.on(data, () {}); console.log(emitter.listenerCount(data)); // 3 console.log(emitter.listenerCount(data, onData)); // 2该改动也促使 Node.js 内部如http模块在添加 noop 事件时改用listenerCount进行计数见本版http: use listenerCount when adding noop event提交。3. libAsyncLocalStorage.bind()与.snapshot()#46387commit c1651bea41 - (SEMVER-MINOR) lib: add AsyncLocalStorage.bind() and .snapshot()AsyncLocalStorage此前主要通过run()将上下文注入异步链。新 API 提供了两个更精细的工具bind(fn)把当前上下文绑定到函数上返回的新函数在任意时刻被调用时都会携带绑定时的上下文snapshot()捕获当前上下文的快照返回一个函数后续每次调用都会在该快照上下文下执行。const { AsyncLocalStorage } require(node:async_hooks); const als new AsyncLocalStorage(); const bound als.run({ id: 1 }, () als.bind(() console.log(als.getStore()))); // 在 run 作用域之外调用仍能拿到 { id: 1 } bound(); const snap als.run({ id: 2 }, () als.snapshot()); // 快照捕获了 { id: 2 } snap(() console.log(als.getStore()));这对于在回调风格的中间件、日志链路追踪trace ID 透传等场景中保持上下文一致非常实用。4. srcfs.openAsBlob与 File-backed Blobs / DataQueue#45258commit 36f36b99b0 - (SEMVER-MINOR) src: add fs.openAsBlob to support File-backed Blobs commit 9b6270afe2 - (SEMVER-MINOR) src: implement DataQueue这一组提交是本版本体量最大的底层改造Node.js 内部的Blob实现被重写为基于新的DataQueue数据结构并支持以文件为后端File-backed的 Blob。配合新增的fs.openAsBlob可以不经内存整载、直接以文件路径创建 Blobconst fs require(node:fs); const blob await fs.openAsBlob(/path/to/large-file.bin); console.log(blob.size); console.log(blob.type); // 空字符串或推断的 MIME 类型File-backed Blob 的slice()操作可直接映射到文件偏移量无需把大文件读入内存是构建文件上传、流式处理等场景的重要基础设施。5. tls支持自动 DHE#46978commit bb9b1c637d - (SEMVER-MINOR) tls: support automatic DHETLS 握手使用 DHEDiffie-Hellman Ephemeral密钥交换时需要 DH 参数。此前必须通过dhparam选项显式指定或依赖 OpenSSL 内置参数。本版本支持自动 DHE即由 OpenSSL 自动生成临时 DH 参数const tls require(node:tls); const server tls.createServer({ // 无需再手动提供 dhparam autoSelectFamily: true, // ... });同一批提交还清理了SSL_OP_SINGLE_DH_USE、SSL_OP_NETSCAPE_*_BUG等历史遗留选项并更新了tls.DEFAULT_CIPHERS的相关文档属于默认更安全、配置更简单的方向。6. urlURLSearchParams实现sizegetter#46308commit 1e20b05acd - (SEMVER-MINOR) url: implement URLSearchParams size getterURLSearchParams新增只读的size属性直接返回键值对的数量与浏览器 Web 平台行为对齐const params new URLSearchParams(a1b2c3); console.log(params.size); // 3此前获取数量需要Array.from(params.entries()).length或遍历keys()现在 O(1) 即可拿到。仓库中还为本版新增了URLSearchParams创建与toString()的 benchmark见 commits 列表验证了该模块的性能优化方向。7. wasi创建 WASI 时支持指定版本#46469commit 60e5f45141 - (SEMVER-MINOR) wasi: add support for version when creating WASInode:wasi模块在创建WASI实例时支持指定 WASI 规范版本便于应用锁定到特定快照版本运行const { WASI } require(node:wasi); const wasi new WASI({ version: preview1, // 指定 WASI 版本 args: process.argv, env: process.env, });本版还同步引入了wasi sock_accept的 stub#46434并更新了uvwasi依赖到 v0.0.16。8. workerinspector 与 trace_events 支持 worker 名称#46832commit a646a22d0f - (SEMVER-MINOR) worker: add support for worker name in inspector and trace_events创建 Worker 时可以传入name选项该名称会出现在 inspector调试器与trace_events追踪输出中方便在多 worker 场景下区分调试目标const { Worker } require(node:worker_threads); const worker new Worker(./worker.js, { name: image-processor, });9. doc新增 collaboratorcommit bd5ef380a5 - doc: add marco-ippolito to collaborators#46816本版同时将 Marco Ippolito 加入 Node.js collaborator 名单属于社区治理层面的例行更新。三、依赖升级与关键修复一览v19.8.0 伴随大量依赖升级与稳定性修复以下是影响面较大的几项类别内容运行时依赖undici 升级至 5.21.0fetch 底层实现simdutf 升至 3.2.2ada 升至 1.0.4uvwasi 升至 v0.0.16nghttp2 升至 1.52.0corepack 升至 0.17.0libuv 修复 Android 构建包管理器npm 升级至 9.5.1punycode 升级至 2.3.0 并标记为 pending deprecation测试运行器describe.only/it.only简写#46604TTY 环境默认使用 spec reporter#46969--test模式下展平 TAP 输出#46440修复 watch 模式计数、YAML 错误重建等assert / util大幅改进 deep equal 比较性能同时回滚了递归深比较的破坏性变更#46593url多项性能与规范符合性改进#46547、#46736、#46867 等formatUrl标记为无副作用http正确计算严格 content length#46601、修复Link头校验#46466、统一 header 处理#46528vm修复vm.compileFunction配合importModuleDynamically时的内存泄漏#46785注意该修复在 v19.8.1 中被回滚四、全量提交列表按模块分组以下按模块归纳 v19.8.0 的全部提交完整 commit hash 可查阅 v19.8.0.mdassert / assert,util修复assert(0)在 try-catch 中的异常消息#46760移除废弃的getFunction()#46661回滚递归深比较破坏性变更并提升 deep equal 性能#46593benchmarkURLSearchParams 创建与toString()#46810、EventTarget add/remove#46779、worker 启动#46680、编码 benchmark 稳定性#46658、拆分Buffer.byteLengthbenchmark#46616、重写 assert benchmark#46593bootstrap环境创建失败时打印堆栈#46533buffer新增Buffer.copyBytesFrom#46500Buffer.byteLength改用 V8 fast API#46616build修复 Arm64 上 Visual Studio 安装检测#46420为 IBM i 增加构建/测试支持#46739child_process / cluster / debugger / events / fs批量添加 trailing commas#46758、#46695、#46714、#46759、#46696debugger 新增 watch/unwatch 校验与文档#46947、设置上下文检查行命令#46812depsundici 5.21.0#47063、simdutf 3.2.2/3.2.1/3.2.0、uvwasi v0.0.16#46434、ada 1.0.4/1.0.3、corepack 0.17.0#46842、npm 9.5.1#46783、nghttp2 1.52.0#46636、libuv Android 修复#46746、V8 cherry-pick#46646、postject 1.0.0-alpha.5#46934dgram修复关闭的 UDP socket 触发未处理异常#46770docTLS 相关文档清理SSL_OP_*选项移除、dhparam描述修正、DEFAULT_CIPHERS使用说明、node:test与node:diagnostics_channel历史信息补充、single-executable 二进制签名步骤、单文件可执行支持平台扩展等esm允许 resolve 返回 import assertions#46153hooks 处理抽离为独立类#45869对 import assertions 增加运行时警告#46901httpnoop 事件改用listenerCount#46769严格 content length 计算#46601Link头校验修复#46466header 处理统一#46528lib全量公共核心模块补 trailing commas#46848修复BroadcastChannel初始化位置#46864修复懒加载DOMException属性描述符#46799punycode 升级至 2.3.0#46719net重做autoSelectFamily实现#46587修复setDefaultAutoSelectFamilyAttemptTimeout取值#47012node-apiasync works 增加__wasm32__防护#46633os提升网络接口性能#46598repl修复.load因共享lineEnding正则导致的死循环#46742移除 lastInputPreview 冗余判断#46857srcnode::url改用std::array传 argv#47035移除 TLS 历史选项与守卫#46956、#46955编码绑定迁移至独立 binding 并使用AliasedUint32Array#46658per-realm binding data#46556实现 DataQueue 与 File-backed Blob#45258回滚 http2 流关闭行为#46721streamcompose()支持 webstreams#46675construct 回调延迟一个 nextTick#46818修复pipeline回调在已结束流上不触发#46600修复respondWithNewView()非零 byteOffset 错误#46465test_runnerspec reporter TTY 默认#46969describe.only/it.only#46604TAP 展平#46440harness 引导跟踪与报错#46962it与test行为对齐#46889timers使用 V8 fast API#46579tools新增 OpenSSL 依赖自动更新#45605、llhttp 更新 action#46766、cares 更新自动化#46993WPT 日报工作流增强urlURLSearchParamssizegetter#46308、初始化下放 C 层#46867、formatUrl标记无副作用#46884、规范符合性与性能改进#46547、#46736vm修复vm.compileFunction内存泄漏#46785v19.8.1 已回滚wasi新增sock_acceptstub#46434创建 WASI 支持 version#46469workerinspector 与 trace_events 支持 worker name#46832五、下载清单与完整性校验v19.8.0 提供以下官方产物下载表由 scripts/release-post/downloadsTable.mjs 根据版本号自动生成由于 v19.8.0 19.9.0该版本不包含 Windows ARM 产物平台文件Windows 32-bit Installerhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-x86.msiWindows 64-bit Installerhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-x64.msiWindows 32-bit Binaryhttps://nodejs.org/dist/v19.8.0/win-x86/node.exeWindows 64-bit Binaryhttps://nodejs.org/dist/v19.8.0/win-x64/node.exemacOS 64-bit Installerhttps://nodejs.org/dist/v19.8.0/node-v19.8.0.pkgmacOS Apple Silicon 64-bit Binaryhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-darwin-arm64.tar.gzmacOS Intel 64-bit Binaryhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-darwin-x64.tar.gzLinux 64-bit Binaryhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-linux-x64.tar.xzLinux PPC LE 64-bit Binaryhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-linux-ppc64le.tar.xzLinux s390x 64-bit Binaryhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-linux-s390x.tar.xzAIX 64-bit Binaryhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-aix-ppc64.tar.gzARMv7 32-bit Binaryhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-linux-armv7l.tar.xzARMv8 64-bit Binaryhttps://nodejs.org/dist/v19.8.0/node-v19.8.0-linux-arm64.tar.xzSource Codehttps://nodejs.org/dist/v19.8.0/node-v19.8.0.tar.gz其他产物可访问 https://nodejs.org/dist/v19.8.0/ API 文档位于 https://nodejs.org/docs/v19.8.0/api/。SHASUMS 与 PGP 签名验证官方发布同时提供SHASUMS256.txt.ascPGP 签名包裹的 SHA-256 校验文件。v19.8.0 的完整校验内容如下-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 531b19242e504e985599413f59b06d2c6be8089678c03c5523272ef7dabd0d1b node-v19.8.0-aix-ppc64.tar.gz a4cd2534f84d4c1399ac6bc970492440bb35c91b08023703f09346d02973b148 node-v19.8.0-darwin-arm64.tar.gz f06c0b4ce2971f12487ab28b536ff9f12aa43f799ddab2a8fffb8cc1ce5bc151 node-v19.8.0-darwin-arm64.tar.xz ebcba3767de967593624be989aaaf143d53ed81aeb5e7d861d1abb6b0bd6db57 node-v19.8.0-darwin-x64.tar.gz 45964fa815b23d8b7780a1a77ab66dc7eead70ef3f2916fb16a9b07b06872135 node-v19.8.0-darwin-x64.tar.xz aed1352baf95234a27d4a6e95faf77c4863ea092939c37af6974019ed36fee43 node-v19.8.0-headers.tar.gz cfbeb53f56497ef850c414854eff9547ef216f0ecf5fa2ccdb0c7538541e46c2 node-v19.8.0-headers.tar.xz dc71b2b84dca27613d61c6c054046c96e18dc54bce9762d5fbcb22989ddefe53 node-v19.8.0-linux-arm64.tar.gz 4c623fc16334fc9766368bad3c01c577381e1062592a9295b57efce3cdedf455 node-v19.8.0-linux-arm64.tar.xz 3cc847138e258f0fa21f698eb0f871cd65c367fea723a111d7db56b0b7c9fdb4 node-v19.8.0-linux-armv7l.tar.gz 2879d6d163b59dae67361de4e6ba81476c6a71b293267d3aac87df05d48b9578 node-v19.8.0-linux-armv7l.tar.xz 860b829a8f802c0bd6a1b2002ca5cd7d39b3d5de05e300b328591420bf66ce3a node-v19.8.0-linux-ppc64le.tar.gz f05a5215c13be1d014a0e5292ebc147b2aa357b96293adb63fc71bf88dc2c6db node-v19.8.0-linux-ppc64le.tar.xz 73f3bb0b5b22ba687851b7d24af4482ef753d26e2afb77361420b4ffaf4f1209 node-v19.8.0-linux-s390x.tar.gz afdb00b5ca342d3f49e5c327941eeea9460b02bedc895126b3cd44bb6869f325 node-v19.8.0-linux-s390x.tar.xz a7f584b2f28eb18e1130ee590cf0062e4ee967412d1e8d029f3eb46c56598afc node-v19.8.0-linux-x64.tar.gz 9e336589505e969912cf15a7d760d0e48085c3985c309273513a8aac0b12f241 node-v19.8.0-linux-x64.tar.xz 5dfae47e3a679accaace5eae8398502838731a3fcde299ce0dd17acce6037b21 node-v19.8.0.pkg d2963d2ac2d1721372d5d6b11e94641915dd51ffdda51ec9067a0f633838dfbb node-v19.8.0.tar.gz 3b7c07e2780920718c1ac7d24b67335f048dd9c3dd695691f41da80f4ea349a6 node-v19.8.0.tar.xz e70d356d65763d99bfb6b2e6ef04816633de7b954ba8004e4a1798766eaf267b node-v19.8.0-win-x64.7z 2309de329aba9d206b9a516279e44376f420032ed6282d7055e32fa1ba61f659 node-v19.8.0-win-x64.zip 2283ba125952421a9b7a0302f105ef28e1d16d1a883a9a1656d9fc1adf7384a8 node-v19.8.0-win-x86.7z 61981327b910df63c50a33b9270997d9fbf4f372badab62aff9d8500b8e0f6b6 node-v19.8.0-win-x86.zip 8f433955b3810602e4c91cdb7ebaa5b4e9736e03918eef31ec90a42f634dbfd0 node-v19.8.0-x64.msi 02fe6e43b60169451e90f78267e9acad08dda8975aea8850bb89bfd4537f1c37 node-v19.8.0-x86.msi ea03b40cbf957a07de7b0cce0f47e22801754cb16ef5c9d195b6c5c58355be0a win-x64/node.exe 327c77b75f1cc09c242aa0fddf1b589f9e7933fd59dbbc21fd1680a813a4c309 win-x64/node.lib 4490b46bf58433e40f0148a1b2f55fcb69b55fe26c86cac77d6e114a728ced05 win-x64/node_pdb.7z a30d5adaf6566224c21cd693f111b880788bc183efa09337c382ba08feecd11a win-x64/node_pdb.zip 794f05a789c04a95073f4f374cd3417c0eea9d0218b0a53c071949df2ce1f27a win-x86/node.exe b287682bcdcfd537affc557689572a4a52d84b6163a781b33522bac5a4042077 win-x86/node.lib 73f03b56c156cde9a519a460d722d6c4090b7cdf2f76c02f6fef6a161ad1f5f7 win-x86/node_pdb.7z 31ee421d1e46c6b50fb7a93aa17fe97fea6f3a28aee1818a05da0ce3c52bd711 win-x86/node_pdb.zip -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEj8yhP8dDC6RAI4Jdw96mlrhVgAFAmQQxHAACgkQdw96mlrh VgDVzg/NZHdAPdXCrsVmkLPS1CT4HFtYBPVvLuXoMadxFGx1F4AhnOwX5oV8s 9zPNPt8YFCW1GFBAPbfnnuvsyi2rCnYc1WXkhRclZgf2q5hLWjguUdSElPcqCzGS CdCkTa53wfIqr9XAvDH5NG717cbj/dpU6XLFvjUQSLiImXg/02GyQD7Ai4CQ9EM ln8lOMZp76xzin2uisuzstwTRMafLZhloEfBmpJ8a/6JVPJhanu2EDNc5FOKmL VQDS4QM/4XAu5rcOtOsI5Z2iIQERDd4wJ5K7GdMQfpUi6XYugnyLALh7aBZDQ/6 rZ/l/Dv0ZSSGZFT/ZT3j8n4vIheZ69DLh7OifGKbGHMmN/2VCWJ7zTCYJD9cQrcs aQehoTr/iPXAmtFGZg5hp/CeczxKsOakRmkvgfSybhWkyPB8GbnadipDZq7OIik0 gJzh1s8l41SDoRaKl6BPjMerHxE479/lRA4sx29rjoAJtLPn/guXyRkN2RaBbNO eU2DrDx5/AXPwybeVtGfvovpB807ZpIYHyKGQfAWOBuihCBp1hvIOSSOEi1V0Cv SiwUniOAt9NigfrCD7cAB7CEkL4Vskz2BwByYnYFaDREZvTFzAZwY2VzklHy8bWk j77JuTgXAnL0h6sJZC6VDvoDaXKViOOgsWz8gTrlYiRKxBtUifU wsb9 -----END PGP SIGNATURE-----验证流程分为两步先校验 SHA-256 哈希再验证 PGP 签名。# 1) 核对 SHA-256 shasum -a 256 node-v19.8.0-linux-x64.tar.xz # 2) 导入 Node.js 官方发布密钥后验证签名 gpg --verify SHASUMS256.txt.asc哈希与公告中对应条目一致且签名验证通过才可确认二进制未被篡改。该校验文件即由 release-post 脚本 从发布服务器拉取并原样嵌入公告正文。六、升级建议对于运行在 v19 Current 线的应用v19.8.0 的 8 项新特性全部向后兼容可以平滑升级升级后建议关注punycode的 pending deprecation 警告并留意url模块行为向规范对齐后的差异。若你恰好升级到了 v19.8.0 且遇到vm.compileFunction相关崩溃可参考 v19.8.1 直接升级到该修复版本。下载与校验请以上文清单为准优先使用带 PGP 签名的SHASUMS256.txt.asc完成完整性验证。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价