Node.js 於 2026 年 10 月 29 日發布 27.0.0-alpha.0.0.0,是下一個大版本的首個 alpha 測試版,由 Rafael Gonzaga 在官方部落格公布。這次升級把 V8 引擎由 14.6 推上 15.6.75.13,OpenSSL 升至 4.1.0,npm 升至 12.1.0,同時帶來多項 semver-major 的破壞性變更。同一時間,24.22.2(LTS)與 26.13.0 兩個分支亦有維護更新 [1]。
引擎與語言特性
V8 15.6 預設啟用一批新語法與 API,包括 Math.sumPrecise()、Intl.Locale.prototype.variants、Iterator.prototype.join()、Iterator.prototype.includes()、Iterator.zip() 與 Iterator.zipKeyed()。仍有旗標控制的實驗功能則有 import defer(--js-defer-import-eval)、不可變 ArrayBuffer(--js-immutable-arraybuffer)與 RegExp buffer boundaries。
記憶體行為的改動值得留意:在沒有設定 --max-old-space-size 時,預設堆疊上限改為實體記憶體的一半,並夾在 256MB 至 4GB 之間;同時 Buffer 與 ArrayBuffer 佔用的記憶體現在會計入堆疊上限。以往依賴舊預設值的應用程式,應明確設定 --max-old-space-size。
可觀察的行為變化
序列化格式亦有變:v8.serialize()、structuredClone() 與 postMessage() 採用的新格式,舊版 Node.js 無法讀取;v8.cachedDataVersionTag() 與編譯快取改為在每個 V8 修補版本都會變動,不再只在 V8 大版本更新時才失效。
其他可觀察差異包括:Math 方法改用 LLVM 的 libm,最後一位可能與以往不同;Math.random() 在指定 --random-seed 下的序列會改變;error.stack 不再沿原型鏈查找;await 產生的 microtask 減少;大型陣列的 Array.prototype.sort() 改用 PowerSort,但仍然穩定。堆積快照現時包含內部物件、數值與完整指令碼原始碼,因此產生時間與檔案大小約為以往的兩倍。WebAssembly 方面,asm.js 不再被編譯成 WebAssembly,--experimental-wasm- 旗標統一改名為 --wasm- [1]。
加密與建置要求
建置層面收緊得最明顯:必須使用 OpenSSL 3 或以上,內建的 FIPS provider 已被移除,OpenSSL engine 支援正式結束,同時清走多條 legacy OpenSSL 程式碼路徑,ncrypto 的舊 OpenSSL 後端亦被刪除,文件中的 OpenSSL 1.x 說明一併移除。
crypto 模組亦加強輸入驗證,Hash、Cipher/Decipher 的 update 與 digest 輸出編碼都會檢查;對未初始化的 DH computeSecret 改為拋出錯誤,Web Crypto 的 buffer 參數拒絕可調整大小的 backing store。多個棄用項目進入生命週期終點,包括 DEP0093、DEP0198、DEP0203 與 DEP0204。
升級注意
domain 模組已改為 runtime 棄用,內部實作改為建基於 AsyncLocalStorage,長期依賴 domain 的舊專案應及早遷移。fs 加入原生 glob 實作,mkdtemp 在 prefix 為 Buffer 時回傳 Buffer;http 的 keepAliveTimeout 預設值由 5 秒提高至 65 秒,req.headers 改為 null prototype,超出 header 限制的回覆會被拒絕,未使用 new 建立 http 物件亦已 runtime 棄用。http2 預設視窗大小同時加大,對高延遲網絡的吞吐有影響。此外,Intel macOS 支援被降級為 experimental,官方二進位工具鏈亦已更新。
Node.js 27 目前只是 alpha,未進入 LTS 線,不適合生產環境;由 26 升級前應先在測試環境驗證序列化相容性與記憶體上限行為 [1][2]。
參考資料
[1] Node.js 27.0.0-alpha.0.0.0 (Alpha)(2026-10-29)
[2] Node.js 版本發布時間表