Node.js 重大更新,你知道更新了啥?
4 月 24 日,Node.js 發(fā)布了 v22。Node.js 22 的更新亮點包括使用require()來導入 ESM 模塊、WebSocket 客戶端、V8 JavaScript 引擎的更新等!
Node.js 22 正式接替 Node.js 21,成為當前的發(fā)布主線。在接下來的六個月里,它將作為當前發(fā)布版(Current),直到2024 年 10 月,屆時將轉(zhuǎn)為活躍狀態(tài)(Active)。
下面就來看看 Node.js 22 的更新內(nèi)容以及 Node.js 版本更新情況!
Node.js 版本說明
Node.js 的發(fā)布可以分為三個階段:
- Current(當前):包含大部分進入 nodejs/node 主分支的非主要(非破壞性)變更。
- Active LTS(活躍長期支持):新功能、錯誤修復和經(jīng)LTS團隊審核后被確定適合該發(fā)布線路且穩(wěn)定的更新。
- Maintenance(維護):關(guān)鍵錯誤修復和安全更新。新功能可能會根據(jù)LTS團隊的判斷加入。通常只在新功能支持遷移到后續(xù)發(fā)布線路的情況下才會添加。
Node.js 奇數(shù)和偶數(shù)版本的區(qū)別如下:
- 奇數(shù)版本適合在特定環(huán)境下進行早期功能測試,而偶數(shù)版本則適用于生產(chǎn)部署;
- 偶數(shù)最終會成為 LTS 版本。而奇數(shù)版本也不會被提升為 LTS 版本,也就不會經(jīng)歷“Active LTS”和“Maintenance”階段。
- Node.js 每年 10 月發(fā)布奇數(shù)版本,次年 4 月發(fā)布偶數(shù)版本,
注意,Node.js 18 將于 2025 年 4 月停止維護,因此建議開始規(guī)劃升級到Node.js 20(長期支持版本LTS)或即將成為LTS 的 Node.js 22。
Node.js 的發(fā)布計劃如下:
圖片
Node.js 22 更新內(nèi)容
- V8 JavaScript 引擎升級至 v12.4:該版本新增了WebAssembly垃圾回收、Array.fromAsync方法、Set方法增強以及迭代器助手等特性,為 Node.js 22帶來更強大的性能和更豐富的功能。;
- V8的Maglev編譯器:現(xiàn)在已在支持的架構(gòu)上默認啟用,顯著提升了短生命周期CLI程序的執(zhí)行性能;
- 使用 require() 來導入 ESM 模塊:Node.js 22新增了對同步ESM進行require()操作的支持,通過啟用實驗性標志--experimental-require-module,開發(fā)者可以更加便捷地同時服務(wù)CJS和ESM用戶,從而推動模塊系統(tǒng)的統(tǒng)一和簡化。當啟用該實驗性標志后,Node.js 22允許require()加載滿足特定條件的ES模塊,這些條件包括在package.json中明確標注為ES模塊或具有.mjs擴展名,并且模塊中不包含頂層await,確保加載過程完全同步。這一改進使得require()能夠像動態(tài)import()那樣加載ES模塊,并直接返回模塊命名空間對象,為開發(fā)者提供了更高的靈活性和便利性。
- 運行package.json腳本:Node.js 22引入了實驗性功能,允許通過命令行標志node --run <script-in-package-json>執(zhí)行package.json中的腳本,并支持node --run test來執(zhí)行測試命令,為開發(fā)者提供了更便捷的方式來運行和管理項目腳本。
- 觀察模式:觀察模式(node --watch)已穩(wěn)定,該模式能夠在文件變化時自動重啟Node.js進程,方便開發(fā)者在開發(fā)過程中實時查看代碼更改的效果。
- WebSocket:默認啟用了與瀏覽器兼容的WebSocket實現(xiàn),此前需要通過--experimental-websocket標志啟用。這一改變?yōu)镹ode.js提供了一個內(nèi)置的WebSocket客戶端,無需額外依賴,簡化了 WebSocket 的使用。
- 新增glob和globSync函數(shù):在node:fs模塊中添加了glob和globSync函數(shù),用于模式匹配。開發(fā)者現(xiàn)在可以利用這些函數(shù)根據(jù)指定的模式匹配文件路徑。
- 優(yōu)化AbortSignal實例的創(chuàng)建性能:提升了AbortSignal實例的創(chuàng)建效率,從而顯著改善了fetch和測試運行器的性能。