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