當前位置: 妍妍網 > 碼農

Node.js 重大更新

2024-04-26碼農

未經授權,禁止轉載,轉載請註明出處!

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 的釋出計劃如下:

    image.png

    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 和測試執行器的效能。