Node.js Blog

Node.js 26.4.0 (Current)

6.0内容质量

TL;DR · AI 摘要

Node.js 26.4.0 版本更新包含多个 SEMVER-MINOR 变更,涉及文件系统、HTTP、TLS 等模块的改进。

核心要点

  • Node.js 26.4.0 引入了对 `readFile()` 缓冲区的支持,由 Matteo Collina 提交。
  • 新增 `TCP_KEEPINTVL` 和 `TCP_KEEPCNT` 选项,用于 `setKeepAlive`,由 Guy Bedford 提交。
  • 新增 `node:vfs` 子系统,由 Matteo Collina 提交。

结构提纲

按章节快速跳转。

  1. Node.js 26.4.0 版本发布,包含多个 SEMVER-MINOR 变更。

  2. 更新了 `blockList` 的稳定性状态,支持 `readFile()` 缓冲区,改进了 `setKeepAlive` 选项。

  3. 新增 `node:vfs` 子系统,支持 `TCP_KEEPINTVL` 和 `TCP_KEEPCNT` 选项。

  4. 包含多个提交,涉及性能优化、基准测试和构建改进。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Node.js 26.4.0 版本更新
    • 重要变更
      • blockList 稳定性状态更新
      • readFile 缓冲区支持
      • setKeepAlive 选项改进
    • 新增功能
      • node:vfs 子系统

金句 / Highlights

值得收藏与分享的关键句。

#Node.js#版本更新#SEMVER-MINOR
打开原文

标题: Node.js — Node.js 26.4.0 (Current)

URL 源: https://nodejs.org/en/blog/release/v26.4.0

Antoine du Hamel

[2026-06-24, 版本 26.4.0 (Current), @aduh95](https://nodejs.org/en/blog/release/v26.4.0#2026-06-24-version-2640-current-aduh95)

[显著变更](https://nodejs.org/en/blog/release/v26.4.0#notable-changes)

[提交](https://nodejs.org/en/blog/release/v26.4.0#commits)

  • [`3ed3de3062`] - meta: 将 actions/checkout 从 6.0.2 升级到 6.0.3 (dependabot[bot]) #63726
  • [`d08d57bf70`] - meta: 将 codecov/codecov-action 从 6.0.0 升级到 6.0.1 (dependabot[bot]) #63725
  • [`e748d192cf`] - meta: 将 cachix/cachix-action 升级 (dependabot[bot]) #63729
  • [`10554eb131`] - meta: 将 actions/stale 从 10.2.0 升级到 10.3.0 (dependabot[bot]) #63728
  • [`791885f2af`] - meta: 将 step-security/harden-runner 从 2.19.0 升级到 2.19.4 (dependabot[bot]) #63727
  • [`32d9a407d9`] - meta: 将 cachix/install-nix-action 从 31.10.5 升级到 31.10.6 (dependabot[bot]) #63723
  • [`b97c7bed07`] - module: 启用现有机制以延迟导入静态模块 (Maya Lekova) #63712
  • [`4becad2117`] - module: 使用 file: URL 作为类型剥离后的 CommonJS 的 sourceURL (Joyee Cheung) #63705
  • [`c71c85b95f`] - net: 通过同步的 net.BoundSocket 实现 TCP 的早期绑定 (Guy Bedford) #63951
  • [`45494d5a8a`] - (SEMVER-MINOR)net: 在 setKeepAlive 中支持 TCP_KEEPINTVL 和 TCP_KEEPCNT (Guy Bedford) #63825
  • [`3988efa1f3`] - net: 在 BlockList 前缀中将 -0 强制转换为 +0 (Filip Skokan) #63556
  • [`484efd1c44`] - quic: 修复 get_reader 的 bug,该 bug 在接收到 FIN 时会丢弃数据 (Tim Perry) #63946
  • [`04a17fe6f0`] - quic: 将 QUIC 证书作为 JS X509Certificate 暴露,而不是原始句柄 (Tim Perry) #63191
  • [`b62d5696dc`] - quic: 修复空闲连接上的 reader backpressure 死锁问题 (Tim Perry) #63950
  • [`3f1c8d7453`] - quic: 修复损坏的 listEndpoints 导出,测试回调函数和 nghttp3 包含 (Tim Perry) #63874
  • [`d8538b9deb`] - quic: 实现 http/3 设置/应用选项的回调函数 (Marten Richter) #63558
  • [`643b19716e`] - quic: 添加 listEndpoints API (James M Snell) #63536
  • [`2bce35bea4`] - sqlite: 在打开失败后不要保持数据库打开状态 (Yagiz Nizipli) #63854
  • [`394af52abb`] - sqlite: 修复函数回调中使用了作用域后堆栈的问题 (ndossche) #63640
  • [`10f03e5958`] - src: 在 cjs_lexer::Parse 中省略无法转换的名称 (Yagiz Nizipli) #63943
  • [`1723773d41`] - src: 保留全局的由插件提供的清理钩子列表 (Anna Henningsen) #63985
  • [`ef12e9ea44`] - src: 保护 OpenSSL 压缩头文件的包含 (Filip Skokan) #64009
  • [`48af8a6d8d`] - src: 在 cjs_lexer::Parse 中处理空的 MaybeLocal (Yagiz Nizipli) #63885
  • [`2a672ee9e8`] - src: 为原生空立即执行的快速路径 (Gürgün Dayıoğlu) #62969
  • [`db6a31d1a1`] - src: 不将弱引用的 BaseObjects 作为 Realms 的子项进行跟踪 (Anna Henningsen) #63842
  • [`5fb837ff46`] - src: 允许使用弱边在 MemoryTracker 中跟踪子项 (Anna Henningsen) #63842
  • [`6d22d373a9`] - src: 使用 C++14 的已弃用属性来标记 NODE_DEPRECATED (Anna Henningsen) #63755
  • [`7ac3fe1992`] - src: 向 node::ObjectWrap 添加清理钩子 (Anna Henningsen) #63642
  • [`d82d369155`] - src: 修复 deflateInit2() 在出现 Z_VERSION_ERROR 时的边界情况 (Nora Dossche) #63476
  • [`03858d152b`] - src: 删除 ffi 中冗余的 handle_ 字段 (Anna Henningsen) #63665
  • [`1682264f6b`] - src: 在 StringBytes::Encode utf8 中添加 Latin1 快速路径 (Mert Can Altin) #63385
  • [`cc29696acf`] - stream: 修复非对象模式下 Writable.toWeb()desiredSize (Matteo Collina) #62986
  • [`d9967a25b2`] - stream: 处理 push 写入器失败原因中的假值 (Trivikram Kamat) #63569
  • [`b53f8f75c9`] - stream: 减少 WHATWG 流程中热点路径的内存分配 (Matteo Collina) #63876
  • [`315ca426d8`] - stream: 在缓冲数据后处理 setEncoding(Matteo Collina)#63973
  • [`06413cd6bd`] - stream: 修复 Utf8Stream 在多字节数据完全写入后出现的停滞问题(Daijiro Wachi)#63964
  • [`a9f9a3dafa`] - stream: 保持重叠的广播读取挂起(Trivikram Kamat)#63500
  • [`009cca11bd`] - stream: 优化 stream/iter 的 backpressure(James M Snell)#63697
  • [`3f81dcfc99`] - stream: 仅将预期数量的参数传递给回调函数(Antoine du Hamel)#63909
  • [`9a83b5d1fe`] - stream: 修复 Utf8Stream 缓冲模式下第一个块丢失的问题(Daijiro Wachi)#63833
  • [`0bdf5adea9`] - stream: 在 pipeTo 中移除 transform-writer 的处理(Trivikram Kamat)#63684
  • [`10272a94b6`] - stream: 在 stream reader 中检查 done 之前处理 backpressure(Daijiro Wachi)#63699
  • [`792c410631`] - stream: 修复 pipeToSync 的字节计数(Trivikram Kamat)#63564
  • [`3cfafbc54b`] - stream: 在中止时拒绝 pull() 读取(Trivikram Kamat)#63498
  • [`640a8cede5`] - stream: 优化无状态转换 flush 的快速路径(Trivikram Kamat)#63605
  • [`ece4477872`] - stream: 优化 pipeTo 的 promise 处理(Matteo Collina)#63572
  • [`2cb84c2daf`] - stream: 在 pipeTo 中处理同步 writev 完成(Trivikram Kamat)#63561
  • [`7d9fdda5fa`] - stream: 在返回时解决挂起的广播读取(Trivikram Kamat)#63603
  • [`e2aea3aac7`] - test: 容忍重复的 watch change 事件(Trivikram Kamat)#63937
  • [`ea6300593a`] - test: 将 test-debugger-run-after-quit-restart 标记为 macOS 上的不稳定测试(Matteo Collina)#64006
  • [`be1b204fa4`] - test: 更新 WPT 中 url 的引用为 d4598eba09(Node.js GitHub Bot)#63899
  • [`b3d0d05b05`] - test: 将 WebCryptoAPI 的 WPT 更新至 03a1476844 (Node.js GitHub Bot) #63900
  • [`046af2609f`] - test: 将 urlpattern 的 WPT 更新至 23aac92784 (Node.js GitHub Bot) #63898
  • [`562b831a98`] - test: 为 utils 中的 3 个方法添加测试 (Daijiro Wachi) #63765
  • [`28e3629dd3`] - test: 在 Linux ARM 调试环境下标记 SEA 测试为不稳定 (Trivikram Kamat) #63743
  • [`243aa846de`] - test: 验证调度器方法中的 ERR_INVALID_THIS (Daijiro Wachi) #63764
  • [`6bd07df2bc`] - test: 为 SEA 之外的代码添加覆盖率测试 (Daijiro Wachi) #63744
  • [`bd67c9d11b`] - test: 将 urlpattern 的 WPT 更新至 2f28df545c (Node.js GitHub Bot) #63771
  • [`e40bfe7081`] - test: 使 Brotli 16GB 测试等待回压 (Trivikram Kamat) #63389
  • [`444c03fd3b`] - test: 为在 worker 中使用 ObjectWrap 添加回归测试 (Mohamed Akram) #63642
  • [`771230df78`] - test: 在 async-hooks 测试中接受 SIGILL 中断 (Trivikram Kamat) #63687
  • [`0b3cd8e5e6`] - test: 为 pathToFileURL 添加更多测试用例 (Rafael Gonzaga) #63293
  • [`0cbc77c60e`] - test: 将 test426-fixtures 更新至 2965987bf4c96afa400c9356c8e620cb340aaee (Node.js GitHub Bot) #63668
  • [`f53dee5fe4`] - test: 将 WebCryptoAPI 的 WPT 更新至 0c413fb56b (Node.js GitHub Bot) #63647
  • [`3048f8dc1a`] - test,debugger: 为调试器探针模式中的类型剥离添加测试 (Joyee Cheung) #63748
  • [`9485caa97e`] - test_runner: 删除未使用的 shuffleArrayWithSeed (Daijiro Wachi) #63847
  • [`34433a4a87`] - test_runner: 修复隔离模式为 none 时的 watch cwd (Trivikram Kamat) #63690
  • [`2e7da29b7c`] - test_runner: 避免为每个文件重新编译覆盖率 glob (sangwook) #63675

Windows 64 位安装程序: https://nodejs.org/dist/v26.4.0/node-v26.4.0-x64.msi

Windows ARM 64 位安装程序: https://nodejs.org/dist/v26.4.0/node-v26.4.0-arm64.msi

Windows 64 位二进制文件: https://nodejs.org/dist/v26.4.0/win-x64/node.exe

Windows ARM 64 位二进制文件: https://nodejs.org/dist/v26.4.0/win-arm64/node.exe

macOS 64 位安装程序: https://nodejs.org/dist/v26.4.0/node-v26.4.0.pkg

macOS Apple Silicon 64 位二进制文件: https://nodejs.org/dist/v26.4.0/node-v26.4.0-darwin-arm64.tar.gz

macOS Intel 64 位二进制文件: https://nodejs.org/dist/v26.4.0/node-v26.4.0-darwin-x64.tar.gz

Linux 64 位二进制文件: https://nodejs.org/dist/v26.4.0/node-v26.4.0-linux-x64.tar.xz

Linux PPC LE 64 位二进制文件: https://nodejs.org/dist/v26.4.0/node-v26.4.0-linux-ppc64le.tar.xz

Linux s390x 64 位二进制文件: https://nodejs.org/dist/v26.4.0/node-v26.4.0-linux-s390x.tar.xz

AIX 64 位二进制文件: https://nodejs.org/dist/v26.4.0/node-v26.4.0-aix-ppc64.tar.gz

ARMv8 64 位二进制文件: https://nodejs.org/dist/v26.4.0/node-v26.4.0-linux-arm64.tar.xz

源代码: https://nodejs.org/dist/v26.4.0/node-v26.4.0.tar.gz

其他发布文件: https://nodejs.org/dist/v26.4.0/

文档: https://nodejs.org/docs/v26.4.0/api/

[SHASUMS](https://nodejs.org/en/blog/release/v26.4.0#shasums)

code
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

60269b7e2f214eb546bddc976d40dba628f63ee440488ebc2594abfc06873258 node-v26.4.0-aix-ppc64.tar.gz 76d6c1b2fee84474374e445606b90cf6f1d8ffa22033f438c5008a21dd54fb35 node-v26.4.0-arm64.msi 4f4fbcacf6b1ff1a95deedba7bd7b2d79efecaa53a8ecb0530546dc9063fefbc node-v26.4.0-darwin-arm64.tar.gz bef4c7e75087c029835f519a7ba640eba52fa617fadb3a9049828ff3b45b57dd node-v26.4.0-darwin-arm64.tar.xz eb3bdd8dec3ff2558ee10e284da7d2a3865af0cbda21f06d397b0265837c641e node-v26.4.0-darwin-x64.tar.gz 06607eef24180c3d1299455efe315bfef67b68b271dc307841cb3fb3af39e211 node-v26.4.0-darwin-x64.tar.xz 2caa0b6addb7e63c38ccd2b1d78d78ba4418b35b5daed0bc9daea23e8ab769c5 node-v26.4.0-headers.tar.gz 6eb5714cf9e917c5627f1f4df8ba126080333ddd51bca64bc0d424f82162c434 node-v26.4.0-headers.tar.xz 773d9ec67266838270ddc105c2548ae8aaff28bc8fe6f34c55d1094043c4165e node-v26.4.0-linux-arm64.tar.gz f6d8eedc52170667d45730ac2f413c4aa1e7cd2165c9cac5746ef3cb0f4ec45a node-v26.4.0-linux-arm64.tar.xz d550366058fb29aade118fe0552f2fadc694da9ea63aadf4a73d6a523398e139 node-v26.4.0-linux-ppc64le.tar.gz 2feb9010b184e13c17150a81c8e12801a8f166513cccea0a5a1ea9d3e521ff20 node-v26.4.0-linux-ppc64le.tar.xz 70ebd033c50f9083be53d8a0583c215049c63212087835da719c3c06cce4117b node-v26.4.0-linux-s390x.tar.gz 55c161e3ff9bec97fe70e6dce64f5e844457de151f6fe602461c79038ec524b1 node-v26.4.0-linux-s390x.tar.xz f221dab30d0e9d544332f06fbee2c62186c97d864d5cac8482dba34f1e38b8dc node-v26.4.0-linux-x64.tar.gz 5c4286dcd5bbd5acb1ccc7eb0e088bd5eb1e3affad671ee9364004f8f6a4a431 node-v26.4.0-linux-x64.tar.xz e810f99f1ed6e4ae719e548b9574bede57a98aadb747d1ad8364a2adcfa5dae9 node-v26.4.0-win-arm64.7z 394cb72e664faaa518ca1877bcc20bb03a3e2f51ed1f6cfce53e1a306e8c97f6 node-v26.4.0-win-arm64.zip 5adb7d769da5384d3ef7c41599b921f2b6e18cbadc487b27b96b35ef018e1497 node-v26.4.0-win-x64.7z 5f87d038c6ec442aa46b9126f8ca170acbd2f3b9b9152ca798cf54596a31e214 node-v26.4.0-win-x64.zip c9df873c4cf0463c63b79774d96b2e126ca6ba9d9f86529846864d41775101d6 node-v26.4.0-x64.msi e9cbc19b609a6a919169c8565355c51899ecc82ce0197