Rolldown:下一代JavaScript/TypeScript打包工具,基于Rust的JS打包工具-速度賊快

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文檔

https://rolldown.uihtm.com

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ā)者帶來深刻的變革。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容