Vue 團隊已正式開源 Rolldown 項目,這是一款基于 Rust 的 JavaScript 打包工具。
項目介紹
Rolldown 是使用 Rust 開發(fā)的?Rollup.js?編譯工具的替代品,基于字節(jié)跳動的 Oxc 工具集合構(gòu)建,它提供與 Rollup 兼容的應用程序接口和插件接口,將作為 Vite 未來使用的打包工具。
Rolldown 是一個用 Rust 編寫的 JavaScript 打包器,旨在作為 Vite 未來使用的打包器。它提供與 Rollup 兼容的應用程序接口和插件接口,但在范圍上更類似于 esbuild。

項目技術分析
技術棧
-? Rust語言:Rolldown的核心代碼使用Rust編寫,充分利用了Rust在性能、安全性和并發(fā)性方面的優(yōu)勢。
-? Rollup兼容性:Rolldown提供了與Rollup兼容的API和插件接口,使得現(xiàn)有的Rollup插件可以無縫遷移到Rolldown。
-? esbuild風格:在設計理念上,Rolldown更接近于esbuild,追求極致的性能和簡潔的API設計。
-? 多平臺支持:Rolldown支持多種平臺,包括Windows、macOS、Linux以及WASM,確保在不同環(huán)境下的兼容性和性能。
依賴庫
-? napi-rs:用于在Rust中編寫Node.js插件,提供了高效的Node-API綁定。
-? oxc:作為底層解析器、解析器和源映射支持的核心庫。
Rolldown文檔
Rolldown 發(fā)展時間線
-? ???? 2023年10月05日,尤雨溪在 2023 ViteConf 大會上宣布將開發(fā)一個名為 Rolldown 的 Rollup 替代工具。
-? ???? 2023年12月31日,尤雨溪同步最新進展,Rolldown 原計劃在今年開放代碼庫,但將推遲到 2024 年第一季度。
-? ???? 2024年03月08日,**Rolldown 正式宣布開源** ??????,不到一天,Github star 數(shù)已到 2.5k。
Rolldown 主要特性
-? ?? 語言:用 Rust 編寫
-? ?? 高性能:為 Vite 設計,目標為 Vite 提供超級快的構(gòu)建速度。
-? ??? 兼容性:兼容 Rollup 的 API 接口和插件
-? ?? 解析器:使用 Oxc 作為解析器
Rolldown 由來
Rolldown 旨在成為 Vite 未來使用的核心底層打包工具,目前 Vite 內(nèi)部依賴于兩個打包工具:Vite 使用 esbuild 進行依賴預打包、TypeScript / JSX 轉(zhuǎn)換、目標降級和代碼壓縮;Vite 將 Rollup 用于其生產(chǎn)構(gòu)建,并支持與 Rollup 兼容的插件接口。
Vite 之所以使用兩種不同的打包工具,是因為雖然它們都很棒,但每個都缺少另一個提供的某些功能:esbuild 速度快且功能豐富,但其輸出特別是在分塊拆分方面存在限制,并不理想用于應用程序捆綁;Rollup 對于應用程序捆綁而言經(jīng)過了時間考驗且成熟穩(wěn)定,但比編譯為本機語言的打包工具慢得多。
使用兩種不同的打包工具在幾個方面都存在明顯弊端:輸出之間微妙差異可能導致開發(fā)和生產(chǎn)構(gòu)建之間行為差異;用戶源代碼會被不同工具重復解析、轉(zhuǎn)換和序列化,在整個生產(chǎn)構(gòu)建過程中會帶來許多可以避免的額外開銷。
理想情況下,我們希望 Vite 能夠利用單一打包器提供原生級性能、內(nèi)置變換以避免解析/序列化開銷、與 Rollup 兼容插件接口以及適合大規(guī)模應用程序的高級構(gòu)建輸出控制。
為什么需要 Rolldown?
從官方文檔了解到,Rolldown 的設計目的是作為未來 Vite 中使用的打包器。但目前 Vite 內(nèi)部依賴兩個捆綁程序,esbuild 主要用來依賴預捆綁、TypeScript / JSX 轉(zhuǎn)換、目標降低和最小化,Rollup 主要用來生產(chǎn)構(gòu)建使用,這也導致一些問題:
-? 輸出之間的細微差別會導致開發(fā)和生產(chǎn)構(gòu)建之間的行為差異。
-? 在整個生產(chǎn)構(gòu)建過程中,用戶源代碼會被不同的工具反復解析、轉(zhuǎn)換和序列化,從而導致大量可以避免的開銷。
在理想情況下,開發(fā)團隊希望 Vite 能利用單一的打包工具,提供原生級性能、避免解析/序列化開銷的內(nèi)置轉(zhuǎn)換、與 Rollup 兼容的插件接口,以及適合大規(guī)模應用的高級構(gòu)建輸出控制。
Rolldown 使用 Rust 編寫,并基于 Oxc 構(gòu)建,目前利用其解析器和解析程序。我們還計劃在將來當 Oxc 的轉(zhuǎn)換器和縮小器可用時利用它們。
我們的長期目標是讓 Vite 用戶(直接或間接通過框架)能夠順暢地過渡到內(nèi)部使用 Rolldown 的 Vite 版本。與此同時 Rolldown 也可以作為一個獨立的捆綁工具直接使用。
這就是建設 Rolldown 的原因。
未來規(guī)劃
Rolldown 由 Rust 編寫,基于 Oxc 構(gòu)建,目前正在使用其解析器。團隊還計劃在 Oxc 的轉(zhuǎn)換器和壓縮工具將來可用時進行集成。
團隊的長期目標是讓 Vite 用戶(直接或間接通過框架)能夠以最小的成本過渡到內(nèi)部使用 Rolldown 的 Vite 版本。
同時,Rolldown 還將作為獨立的打包器直接使用。
Rolldown 未來可期!
Rollup API 兼容性
Rolldown 的目標是盡可能地與 Rollup 的 API 和插件接口保持一致,以便促進采用。在簡單的使用情況下,它很可能能夠作為一個即插即用的替代品。然而,在涉及高級選項時,邊緣情況下可能會存在一些細微差異。
我們最初打算將 JS 移植到 Rust 中,但很快意識到為了實現(xiàn)最佳性能,我們必須優(yōu)先考慮按照 Rust 工作方式編寫代碼。Rolldown 的內(nèi)部架構(gòu)更接近 esbuild 而不是 Rollup,并且我們的塊拆分邏輯可能會有所不同于 Rollup。
Rolldown 的范圍也比 Rollup 更廣泛,并且更類似于 esbuild。它具有內(nèi)置的 CommonJS 支持、node_modules 解析,并且未來還將支持 TypeScript / JSX 轉(zhuǎn)換和代碼壓縮。
總結(jié)
Rolldown 是一個備受矚目的前端項目,旨在解決當前打包工具的性能瓶頸和兼容性問題。它采用高效的 Rust 語言編寫,與 Rollup API 保持兼容,并有望帶來顯著的性能提升。Rolldown 還致力于實現(xiàn)單一解析和 AST 樹標準化,有望為開發(fā)環(huán)境和構(gòu)建時間帶來前所未有的性能飛躍。若成功實現(xiàn)這些目標,Rolldown 將成為前端開發(fā)領域的關鍵引擎,為開發(fā)者帶來深刻的變革。