未經授權,禁止轉載,轉載請註明出處!
4 月 24 日,Node.js 釋出了 v22。Node.js 22 的更新亮點包括使用
require()
來匯入 ESM 模組、WebSocket 客戶端、V8 JavaScript 引擎的更新等!
Node.js 22 正式接替 Node.js 21,成為當前的釋出主線。在接下來的六個月裏,它將作為當前釋出版(Current),直到2024 年 10 月,屆時將轉為活躍狀態(Active)。
下面就來看看 Node.js 22 的更新內容 以及 Node.js 版本更新情況 !
Node.js 版本說明
Node.js 的釋出可以分為三個階段:
Current(當前) :包含大部份進入 nodejs/node 主分支的非主要(非破壞性)變更。
Active LTS(活躍長期支持) :新功能、錯誤修復和經LTS團隊稽核後被確定適合該釋出路線且穩定的更新。
Maintenance(維護) :關鍵錯誤修復和安全更新。新功能可能會根據LTS團隊的判斷加入。通常只在新功能支持遷移到後續釋出路線的情況下才會添加。
Node.js 奇數和偶數版本的區別如下:
奇數版本適合在特定環境下進行早期功能測試,而偶數版本則適用於生產部署;
偶數最終會成為 LTS 版本。而奇數版本也不會被提升為 LTS 版本,也就不會經歷「Active LTS」和「Maintenance」階段。
Node.js 每年 10 月釋出奇數版本,次年 4 月釋出偶數版本,
註意,Node.js 18 將於 2025 年 4 月停止維護,因此建議開始規劃升級到Node.js 20(長期支持版本LTS)或即將成為LTS 的 Node.js 22。
Node.js 的釋出計劃如下:
Node.js 22 更新內容
V8 JavaScript 引擎升級至 v12.4
:該版本新增了WebAssembly垃圾回收、
Array.fromAsync
方法、
Set
方法增強以及叠代器助手等特性,為 Node.js 22帶來更強大的效能和更豐富的功能。;
V8的Maglev編譯器 :現在已在支持的架構上預設啟用,顯著提升了短生命周期CLI程式的執行效能;
使用 require() 來匯入 ESM 模組
:Node.js 22新增了對同步ESM進行
require()
操作的支持,透過啟用實驗性標誌
--experimental-require-module
,開發者可以更加便捷地同時服務CJS和ESM使用者,從而推動模組系統的統一和簡化。當啟用該實驗性標誌後,Node.js 22允許
require()
載入滿足特定條件的ES模組,這些條件包括在
package.json
中明確標註為ES模組或具有.mjs副檔名,並且模組中不包含頂層
await
,確保載入過程完全同步。這一改進使得
require()
能夠像動態
import()
那樣載入ES模組,並直接返回模組名稱空間物件,為開發者提供了更高的靈活性和便利性。
執行package.json指令碼
:Node.js 22引入了實驗性功能,允許透過命令列標誌
node --run <script-in-package-json>
執行
package.json
中的指令碼,並支持
node --run test
來執行測試命令,為開發者提供了更便捷的方式來執行和管理計畫指令碼。
觀察模式
:觀察模式(
node --watch
)已穩定,該模式能夠在檔變化時自動重新開機Node.js行程,方便開發者在開發過程中即時檢視程式碼更改的效果。
WebSocket
:預設啟用了與瀏覽器相容的WebSocket實作,此前需要透過
--experimental-websocket
標誌啟用。這一改變為Node.js提供了一個內建的WebSocket客戶端,無需額外依賴,簡化了 WebSocket 的使用。
新增glob和globSync函式
:在
node:fs
模組中添加了
glob
和
globSync
函式,用於模式匹配。開發者現在可以利用這些函式根據指定的模式匹配檔路徑。
最佳化AbortSignal例項的建立效能
:提升了
AbortSignal
例項的建立效率,從而顯著改善了
fetch
和測試執行器的效能。