Node.js 26 發佈:Temporal API 與運行時現代化
Node.js 26 的發佈標誌著該平台在現代化其核心 API 與引擎方面邁出了重要一步。雖然版本升級帶來了常見的效能改進與依賴更新,但最引人注目的新增功能是預設啟用了 Temporal API,解決了 JavaScript 生態系統中最長期的痛點之一:日期與時間處理。
如同「Current」版本的慣例,Node.js 26 將在接下來的六個月內作為尖端版本,並於十月進入長期支援 (LTS) 階段。對於開發者而言,這次發佈與其說是一個單一的「殺手級功能」,不如說是清理舊有負擔並整合現代 TC39 提案的累積效應。
Temporal API 的到來
Node.js 26 中最受期待的變化是現在預設啟用的 Temporal API。多年來,JavaScript 開發者一直依賴舊有的 Date 物件,該物件因其 API 混亂且缺乏對時區與日曆系統的支持而廣受批評。為了填補這一空白,社群高度依賴 Moment.js、Luxon 和 date-fns 等第三方函式庫。
有了 Temporal,Node.js 提供了一個直接內建於運行時中的強大且功能豐富的替代方案。正如 Hacker News 社群成員所指出的,這是向平台原生日期/時間處理邁出的受歡迎轉變:
"Moment 和 Luxon 相當不錯,但合理的日期/時間處理應該是平台開箱即用的功能。"
V8 14.6 與新語言特性
Node.js 26 將 V8 JavaScript 引擎更新至版本 14.6.20.33。這次更新不僅僅是為了速度;它還將幾個值得注意的 TC39 提案引入了運行時:
Map Upsert
[Weak]Map.prototype.getOrInsert() 和 getOrInsertComputed() 方法引入了一種更有效率的方式來處理類似快取的模式。有趣的是,一些開發者注意到這裡對 "upsert" 的定義在語義上有所轉變。雖然傳統上被視為 "Update or Insert"(更新或插入),但 V8 的實作專注於 "Get or Insert"(獲取或插入)。
Iterator Sequencing
新增的 Iterator.concat() 允許更輕鬆地對迭代器進行排序,簡化了開發者處理數據流與複雜迭代邏輯的方式。
現代化平台:移除與棄用
Node.js 26 繼續了激進進的 "SEMVER-MAJOR" 變更,以移除舊有代碼並減輕核心團隊的維護負擔。關鍵的移除項目包括:
http.Server.prototype.writeHeader(): 現在已完全移除。開發者必須遷移至writeHead()。舊版 Stream 模組: 內部的
_stream_wrap、_stream_readable、_stream_writable、_stream_duplex、_stream_transform和_stream_passthrough模組已被清除。TypeScript Transforms:
--experimental-transform-types旗標已被移除,這標誌著運行時處理類型轉換的方式發生了轉變。Corepack: Corepack 的文件已被移除,且用戶注意到它不再隨 Node.js 26 一起發佈,這可能會影響使用它作為安裝
pnpm主要方法的人。
其他值得注意的更新
- Undici 8: 預設的 HTTP 客戶端已更新至版本 8.0.2,持續提升網路請求的效能與可靠性。
- 建置需求: 最低 GCC 要求已提升至 13.2,且不再支援 Python 3.9。
- Crypto 增強功能: 此發佈包含
crypto模組的幾項更新,包括對KeyObjectAPI 的原始金鑰格式支持,以及非對稱金鑰導入的統一化。
社群觀點
雖然這次發佈普遍受到好評,但社群仍持續推動核心中缺失的功能。一些開發者對內建的 SQLite 模組仍帶有實驗性標籤表示失望,而其他人則感嘆缺乏原生的 WebSocket server 實作來簡化部署並提升安全性。
對於想要升級的開發者,建議審查您對舊版 http 與 stream 方法的使用情況,以避免破壞性變更。一旦完成向 Temporal 的遷移,對重型日期處理函式庫的需求可能會終於開始減少。