<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Vue 團(tuán)隊(duì)正式開源 Rolldown

          共 3438字,需瀏覽 7分鐘

           ·

          2024-04-11 12:56

          本文適合對(duì)rust打包工具感興趣的小伙伴閱讀。

          歡迎關(guān)注 前端早茶 ,與廣東靚仔攜手共同進(jìn)階~


          前言

          3 月 8 日,Vue 團(tuán)隊(duì)正式開源了其對(duì)外公布已久的打包工具:Rolldown,它是使用 Rust 開發(fā)的 Rollup 替代品,提供了與 Rollup 兼容的 API 和插件接口,但在功能范圍上將更接近 Esbuild。 下面我們一起來(lái)看看Rolldown的背后故事

          背景

          10 月 5 日 - 6 日,ViteConf 2023 在線舉行,Vue 和 Vite 的創(chuàng)建者尤雨溪發(fā)表了題為《The State of Vite》 的演講,在演講中,尤雨溪總結(jié)了 Vite 的版本發(fā)布情況、Vite 增長(zhǎng)和采用情況,并對(duì) Vite 的未來(lái)進(jìn)行了展望。

          3568b2101dee9fda92c4e55e15957625.webp

          Vite 團(tuán)隊(duì)正在研發(fā) Rolldown,它是使用 Rust 開發(fā)的 Rollup 替代品。從零開始用 Rust 編寫一個(gè)打包工具并非易事,這需要花費(fèi)大量的努力。下面來(lái)看一下 Rolldown 的路線圖,以及從短期到長(zhǎng)期的關(guān)鍵節(jié)點(diǎn)。

          第一階段:聚焦基礎(chǔ)打包功能

          第一階段的目標(biāo)是能夠替代 esbuild 進(jìn)行依賴預(yù)打包,其中關(guān)鍵的挑戰(zhàn)在于處理 CommonJS 和偽 ESM 依賴項(xiàng)。

          第二階段:實(shí)現(xiàn) Rollup 的功能

          第二階段的目標(biāo)是實(shí)現(xiàn)與 Rollup 相當(dāng)?shù)墓δ埽绕涫桥c Rollup 插件生態(tài)系統(tǒng)的兼容性,以及實(shí)現(xiàn) tree-shaking 和高級(jí)塊分割控制。最終目標(biāo)是在 Vite 中使用 Rolldown 作為生產(chǎn)構(gòu)建的替代品,以提供功能更強(qiáng)大、高效、易用和靈活的打包工具。

          第三階段:常見(jiàn)需求的內(nèi)置轉(zhuǎn)換

          第三個(gè)階段會(huì)稍微遙遠(yuǎn)一些,它將包括一些最常見(jiàn)需求的內(nèi)置轉(zhuǎn)換,例如 TypeScript、JSX、代碼壓縮,以及基于目標(biāo)環(huán)境進(jìn)行語(yǔ)法降級(jí)。這個(gè)階段的目標(biāo)是實(shí)現(xiàn) esbuild 的功能,最終將用 Rolldown 取代 esbuild 和 Rollup。

          第四階段:使用 Rust 重構(gòu) Vite

          從長(zhǎng)遠(yuǎn)來(lái)看,Vite 團(tuán)隊(duì)也在考慮如何讓 Vite 本身能夠更好地受益于原生級(jí)別的速度。一種可能的實(shí)現(xiàn)方式是通過(guò) Rust API 來(lái)公開 Rolldown 的插件容器,并將 Rolldown 作為 Vite 引入自己的Rust核心的依賴項(xiàng)。這樣一來(lái),Vite 就可以將許多內(nèi)部插件和轉(zhuǎn)換使用 Rust 重構(gòu),從而提高性能關(guān)鍵路徑上的效率。此外,為那些開發(fā)過(guò)程中有太多未打包模塊的項(xiàng)目引入完全打包模式也是一個(gè)備選方案。

          最終,Rolldown 的目標(biāo)并不是取代現(xiàn)有的工具,而是更好地滿足在 Vite 中所面臨的獨(dú)特需求,并最終使所有使用 Vite 的用戶受益。

          Rolldown

          Github:https://github.com/rolldown/rolldown

          文檔:https://rolldown.rs/

          可以看到rolldown的熱度很高

          ee5b0870d8d9d48dd6fef468abf2cc2d.webp

          都有 Rollup 了,為什么還需要 Rolldown?

          Rolldown 旨在成為 Vite 未來(lái)使用的核心底層打包工具,與常見(jiàn)的開箱即用的構(gòu)建工具(如Webpack、Vite等)不同,它更加專注于底層的打包邏輯和核心功能,以滿足 Vite 對(duì)于高效打包的特定需求。 5f7afd026ad73951b834324f8d9cd763.webp

          目前,Vite 的底層使用了兩個(gè)打包工具:
          Es b uild :Esbuild 是一款高性能的  JavaScript 打包器,專注于實(shí)現(xiàn)極速的構(gòu)建過(guò)程。它支持多種模塊類型、語(yǔ)法轉(zhuǎn)換和插件擴(kuò)展,且無(wú)需緩存即可迅速完成打包任務(wù)。在 Vite 中,Esbuild 被用于依賴預(yù)打包、TypeScript和JSX轉(zhuǎn)換、目標(biāo)降級(jí)以及代碼壓縮。

          Rollup :Rollup 是一個(gè)JavaScript模塊打包器,能夠編譯小塊代碼成復(fù)雜的大型代碼塊,特別支持ES6模塊。它支持 Tree Shaking,有效去除未使用的代碼,減少最終文件大小。在 Vite 中,Rollup 被用于生產(chǎn)構(gòu)建,并支持一個(gè)與Rollup 兼容的插件接口。

          V
          ite 之所以采用兩個(gè)不同的打包工具,是因?yàn)殡m然 Esbuild 速度卓越且功能豐富,但其在代碼塊拆分方面的局限使其不適用于應(yīng)用打包;而 Rollup 雖在應(yīng)用打包方面成熟可靠,但性能卻不及原生編譯工具。兩者各有優(yōu)勢(shì),功能互補(bǔ),因此 Vite 需要結(jié)合使用以滿足不同需求。然而,使用兩個(gè)不同的打包工具存在明顯弊端:它們之間的輸出差異可能導(dǎo)致開發(fā)環(huán)境與生產(chǎn)環(huán)境行為的不一致,同時(shí),用戶代碼在生產(chǎn)構(gòu)建過(guò)程中會(huì)被多次解析、轉(zhuǎn)換和序列化,從而增加了不必要的性能開銷。

          因此,希望 Vite 能夠整合一個(gè)單一的、性能卓越的打包工具,既能減少解析和序列化開銷,又能與 Rollup 插件生態(tài)兼容,并具備出色的大型應(yīng)用構(gòu)建輸出控制能力。所以,Rolldown 就誕生了!

          正是在這個(gè)背景下,Rolldown 應(yīng)運(yùn)而生!

          Rolldown 的未來(lái)

          Rolldown 使用 Rust 編寫,并且使用了 Oxc 中的工具。Oxc 是字節(jié)跳動(dòng)出品的一個(gè)用 Rust 編寫的 JavaScript 高性能工具集合,該項(xiàng)目的重點(diǎn)在于構(gòu)建 JavaScript 的基本編譯器工具:解析器、linter、格式化程序、轉(zhuǎn)譯器、壓縮器和解析引擎。此外,OXC 還為 Rspack、Rolldown 和 Ezno 等新興 JavaScript 工具提供支持。 be052a34d3caef05270b0c6ca06447c5.webp
          目前,Rolldown 主要依賴其高效的解析器和解析引擎進(jìn)行工作。未來(lái),一旦 Oxc 的轉(zhuǎn)換器和壓縮器可用,Rolldown 也將計(jì)劃集成它們,Rolldown 也將直接作為獨(dú)立的打包使用。當(dāng) Rolldown 發(fā)展至成熟階段時(shí),它將能夠直接取代 Esbuild 和 Rollup,這樣將減少了對(duì)外部工具的依賴,為未來(lái)的功能擴(kuò)展提供更大的便利和靈活性。

          注意:目前 Rolldown 仍處于積極研發(fā)階段,尚未達(dá)到生產(chǎn)環(huán)境的使用標(biāo)準(zhǔn)。

          最后

          Rolldown 可能是未來(lái) 5-10 年最具影響力的前端項(xiàng)目之一。目前,Rollup 已成為業(yè)內(nèi)領(lǐng)先的打包工具,其開創(chuàng)了 Tree Shaking 的概念。當(dāng) Vite 橫空出世,它亦以Rollup 為構(gòu)建核心,成為多個(gè)主流框架的首選構(gòu)建工具。Rollup 已經(jīng)從單純的庫(kù)打包工具,演變?yōu)楝F(xiàn)代前端開發(fā)的核心支柱。
              然而,隨著前端開發(fā)規(guī)模的擴(kuò)張,Rollup 的性能瓶頸逐漸顯現(xiàn)。盡管 Esbuild 等使用 Go 編寫的原生打包工具速度飛快,但它們與 Rollup 并不兼容,且存在諸多局限,如缺乏 TypeScript 支持、 Tree Shaking限制等。Vite 試圖結(jié)合 Esbuild 與 Rollup 以獲得兩全其美的效果,但解析問(wèn)題卻成為新的挑戰(zhàn)。每個(gè)構(gòu)建工具都需要生成自己的 AST 樹,且眾多 Rollup/Vite 插件也重復(fù)進(jìn)行解析,這無(wú)疑造成了資源浪費(fèi)。
              Rolldown 項(xiàng)目應(yīng)運(yùn)而生,旨在解決這些問(wèn)題。它采用 Rust 語(yǔ)言編寫,這一語(yǔ)言以高效著稱,甚至在某些場(chǎng)景下超越了 Go 的性能。更重要的是,Rolldown 力求與 Rollup API 保持兼容,這將是一個(gè)巨大的突破。一旦成功,Vite 等框架可以無(wú)縫切換到 Rolldown,帶來(lái)顯著的性能提升。
              更值得一提的是,Rolldown 還致力于實(shí)現(xiàn)單一解析的標(biāo)準(zhǔn)化。由于 Vite 的廣泛應(yīng)用和 Rolldown 采用 OXC 進(jìn)行解析,我們有望看到一個(gè)以單一解析和 AST 樹標(biāo)準(zhǔn)化為核心的新時(shí)代。這將為開發(fā)環(huán)境和構(gòu)建時(shí)間帶來(lái)前所未有的性能飛躍。
              展望未來(lái),若 Rolldown 能夠成功實(shí)現(xiàn)這些目標(biāo),它將成為轉(zhuǎn)換每一個(gè)代碼字節(jié)的關(guān)鍵引擎,無(wú)論開發(fā)者選擇何哪個(gè)框架。Rolldown 的出現(xiàn),無(wú)疑將為前端開發(fā)領(lǐng)域帶來(lái)一場(chǎng)深刻的變革。

          關(guān)注我,一起攜手進(jìn)階

          歡迎關(guān)注前端早茶,與廣東靚仔攜手共同進(jìn)階~

          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产婷婷五月 | 亚洲无码视频在线观看高清 | 俺来也俺也去无码 | 日本免费不卡一区 | 狠狠干狠狠干 |