![]()
在軟件開發(fā)領(lǐng)域,技術(shù)迭代和更新是常態(tài)。最近,Node.js社區(qū)發(fā)生了一些重大變化,這些變化可能會(huì)對(duì)JavaScript開發(fā)者產(chǎn)生深遠(yuǎn)影響。Node.js計(jì)劃移除自16.13.0版本以來一直包含的工具Corepack,這一決定在開發(fā)者中引起了廣泛的討論。
Corepack是一個(gè)簡(jiǎn)化了管理不同Node.js版本和包管理器(如npm、yarn和pnpm)的工具,它允許開發(fā)者在不同項(xiàng)目中輕松切換,同時(shí)解決了兼容性問題和手動(dòng)配置的繁瑣。然而,Corepack的命運(yùn)在經(jīng)歷了一番波折后,最終決定被移除。這一決定背后的故事頗為曲折,原本計(jì)劃將Corepack默認(rèn)啟用,但后來卻出現(xiàn)了180度大轉(zhuǎn)彎,決定將其移除。許多web開發(fā)者對(duì)此表示失望,因?yàn)镃orepack曾是他們處理npm問題的一大助力。
與此同時(shí),Bun這個(gè)集成了JavaScript運(yùn)行時(shí)、打包器、測(cè)試運(yùn)行器和包管理器的工具,現(xiàn)在提供了一個(gè)實(shí)驗(yàn)性功能,允許從JavaScript直接編譯和運(yùn)行原生C代碼。Bun的這一新特性引發(fā)了社區(qū)的廣泛關(guān)注,因?yàn)樗蜷_了JavaScript與系統(tǒng)級(jí)編程語(yǔ)言C之間的直接通道。
Bun的創(chuàng)建者Jarred Sumner表示,世界上從壓縮算法到密碼學(xué),再到網(wǎng)絡(luò),甚至是你正在閱讀這篇文章的web瀏覽器,幾乎都是用C語(yǔ)言編寫的。如果它們不是用C語(yǔ)言編寫的,那么它們就是使用CABI(例如C++、Rust、Zig等)編寫的,并以C庫(kù)的形式提供。C語(yǔ)言及其ABI是系統(tǒng)編程的過去、現(xiàn)在和未來。
Sumner指出,通過C語(yǔ)言,開發(fā)者可以以低門檻的方式使用C庫(kù)和系統(tǒng)庫(kù),這一特性允許運(yùn)行JavaScript的同一項(xiàng)目也能夠運(yùn)行C代碼,而無需單獨(dú)的構(gòu)建步驟。他舉例說,使用Bun可以通過ffmpeg將短視頻轉(zhuǎn)換速度提高三倍,這得益于避免了為每個(gè)視頻生成新進(jìn)程和分配大量?jī)?nèi)存的開銷。此外,還可以通過macOSKeychainAPI安全地保存和加載密碼。
Bun的這一新特性對(duì)于那些希望從JavaScript使用C庫(kù)或系統(tǒng)API的開發(fā)者來說是一個(gè)福音。盡管如此,Sumner也提醒說,開發(fā)者可能并不需要用這種方式來編譯大型項(xiàng)目,如PostgreSQL或SQLite。因?yàn)門inyCC編譯的C代碼雖然性能尚可,但它不會(huì)進(jìn)行像Clang或GCC那樣的高級(jí)優(yōu)化,例如自動(dòng)向量化或非常專業(yè)的CPU指令集。
在技術(shù)快速迭代的今天,Node.js和Bun的這些變化標(biāo)志著JavaScript生態(tài)系統(tǒng)正在不斷進(jìn)化,以滿足開發(fā)者日益增長(zhǎng)的需求。對(duì)于Node.js來說,移除Corepack可能是為了簡(jiǎn)化其工具鏈,讓開發(fā)者更專注于使用npm、yarn或pnpm等成熟的包管理器。而對(duì)于Bun,支持原生C代碼的運(yùn)行則展示了其在提升性能和功能性方面的雄心。
這些變化對(duì)于JavaScript開發(fā)者來說是一個(gè)雙刃劍。一方面,他們可能需要重新評(píng)估自己的工具選擇和開發(fā)流程,以適應(yīng)Node.js的新方向;另一方面,Bun的新特性為他們提供了更強(qiáng)大的工具,以構(gòu)建性能更優(yōu)和功能更全的應(yīng)用。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.