Node.js 同日雙線發布:26.6.0(Current) 帶來 FFI 事件迴圈存取、24.19.0(LTS) 補齊 QUIC 憑證壓縮
Node.js Blog · 2026-08-03
核心改動
Node.js 專案在 2026-08-03 同時發布了 v26.6.0(Current 線)與 v24.19.0(代號 Krypton,LTS 線),兩者皆由 release manager @aduh95(Antoine du Hamel)簽出。v26.6.0 的 Notable Changes 只有三項 SEMVER-MINOR:FFI 模組新增 getCurrentEventLoop()(#64323,作者 Paolo Insogna),讓透過 FFI 呼叫的原生程式碼可以取得目前執行中的 libuv event loop 控制代碼;測試執行器(test runner)新增 context.log() 方法與對應的 test:log 事件(#64389),並讓 TestStream 事件回報 entryFile(#64309),兩者都由 Moshe Atlow 提交。這一版的改動集中在維運面而非新功能面,多數 commit 屬於依賴升級與底層修補。
依賴版本方面,v26.6.0 將 npm 升到 11.18.0,並對 V8 做了兩次 cherry-pick/backport(commit 1158ae719749 與 a05321ebd98e),另外 libffi 升至 3.7.1、ngtcp2 升至 1.24.0、c-ares 升至 1.34.8、時區資料庫更新到 2026c。加密模組是本版修補最密集的區塊,Filip Skokan 一人就提交了六項相關修正:保留 RSA-PSS legacy 公鑰的 DER 編碼、清除 provider 私鑰複本、處理不完整的 RSA 私鑰、保留舊版 DH 驗證邏輯、將 KangarooTwelveParams 的自訂長度上限限制在 512 bytes(#64557),以及把 OpenSSL 3、BoringSSL 與舊版後端的程式路徑拆開(#64211)。
影響範圍
Stream 相關改動同樣值得留意:WHATWG byte stream 的非同步疊代效能被 Matteo Collina 優化(#64291),且 stream 佇列(queue)與請求佇列改用 ring buffer 實作(#64312、#64431)以降低記憶體搬移開銷;Blob.stream() 洩漏來源 buffer 的問題也被修掉(#63577)。QUIC 方面新增了對 TLS 憑證壓縮的支援(#64434,作者 Sebastian Beltran),並修掉多個崩潰與資料停滯的邊界情況,例如「沒有 onstream handler 時崩潰」(#64158)與「沒有待處理 stream 時 datagram 停滯」(#64303)。net 模組讓 TCP Server 與 Socket 可以跨 worker thread 轉移(#64225,Matteo Collina),這對需要在多執行緒間交接連線的伺服器架構有直接幫助。
檔案系統這邊,遞迴 readdir 改成疊代式實作以避免深層目錄的堆疊風險(#64149),lchmod 修正為正確更新符號連結本身的權限而非其目標(#64350),Windows 上 cp 對符號連結與 EEXIST 的處理也被修正(#64353)。此外 zlib 現在會拒絕被截斷的 zstd 輸入(#64593),避免靜默接受不完整資料。
LTS 線的新能力
v24.19.0 作為 LTS 線,Notable Changes 有十三項,內容明顯更豐富。最值得關注的是幾個新的同步網路 API:dgram.Socket.prototype.bindSync()(#63838)與 connectSync()(#63932),以及讓 TCP 能提早綁定的 net.BoundSocket(#63951),三者都由 Guy Bedford 提交,目的是讓需要「先綁定埠號、稍後才真正連線/監聽」的場景(例如特權埠轉交給非特權程序)不必依賴回呼即可完成。
buffer:實作blob.textStream()(#64036,Matthew Aitken)esm:新增--experimental-import-text旗標,可直接以文字形式 import 檔案(#62300)fs:readFile()支援呼叫端自行提供 buffer,減少一次配置(#63634,Matteo Collina)http:新增httpValidation選項,可調整標頭值的驗證嚴格度(#61597)net:setKeepAlive()支援設定TCP_KEEPINTVL與TCP_KEEPCNT(#63825)tls:回報協商後的 TLS group(#64119),並新增certificateCompression選項(#62217)stream:對外開放ReadableStreamTee(#64195)
穩定性標記方面,stream.compose 正式轉為 stable(#62562),blockList 則從 experimental 提升為 release candidate(#63050)。加密與 TLS 是本版修補數量最多的區塊,包含拒絕驗證階段的小階(small-order)EdDSA 點(#64026,防範已知的簽章偽造手法)、修正大型 DH generator 驗證(#64092)、拒絕不合法的原始金鑰匯入(#63134),以及在 OpenSSL 3 以上改用 EVP_MAC 計算 HMAC(#63942)。子行程模組也修正了權限模型透過 NODE_OPTIONS 傳遞時的漏洞(#63972)。依賴版本上,npm 升至 11.17.0,acorn 升至 8.17.0,sqlite 升至 3.53.3,V8 則有兩筆 backport/cherry-pick(bef0d9c1bc90、64b36b441179)。
原始來源:Node.js 26.6.0 (Current) release notes、Node.js 24.19.0 (LTS) release notes