图片
Rolldown 基于 Rust 语言开发,并且是在 Oxc[4] 基础架构上构建的。目前,Rolldown 内部已经在使用 Oxc 提供的 parser 和 resolver。未来,随着 Oxc 转换和压缩功能的推出,它们也会被整合到 Rolldown 中。
图片
为什么设计 Rolldown
Rolldown 设计初衷是作为 Vite 未来采用的底层打包工具。
目前,Vite 在内部整合了两款打包工具:
- esbuild,由 Evan Wallace 开发。Vite 利用 esbuild 完成依赖的预打包、TypeScript / JSX 的转换、代码的降级处理以及代码压缩。
- Rollup,由 Rich Harris 创立,并由 Lukas Taegert-Atkinson 维护。Vite 在其生产环境构建中使用 Rollup,并且支持与 Rollup 兼容的插件接口。
之所以同时采用这两种打包工具,是因为虽然它们各有卓越之处,但同时也各自缺乏对方所具备的某些功能:
- esbuild 的执行速度极快,功能全面,但其打包输出,尤其是在代码分割方面,对于应用打包而言并不尽如人意。
- Rollup 在应用打包方面经过了严格的实战检验,成熟稳定,但相比于编译为原生语言的打包工具,它的速度要慢得多。
不得不依赖两套打包工具存在以下几个不理想的地方:
- 不同工具输出之间的微小差异,可能会导致开发环境与生产环境构建的行为表现不一致。
- 在生产环境构建过程中,用户源代码需要被多个工具反复进行解析、转换和序列化,这导致了大量不必要的开销。
我们理想中的情景是,Vite 能够使用一种单一的打包工具,这款工具不仅能提供近乎原生的性能,还能内置转换功能以减少解析和序列化的开销,同时,它还需要有与 Rollup 兼容的插件接口,并且能提供适合大型应用的先进构建输出控制功能。
Rolldown vs Rollup
Rolldown 力图在最大程度上与 Rollup 的 API 和插件体系保持兼容,以简化用户的迁移过程。对于一些基础应用场景来说,Rolldown 有望直接替代现有工具。然而,在处理一些特殊情况,特别是在涉及到复杂配置时,可能会遇到轻微的差异。
最初,Rolldown 开发团队计划将 JavaScript 代码转换为 Rust 实现,但很快他们发现,要想充分发挥 Rust 的性能优势,就必须按照 Rust 的特性来编写代码。因此,Rolldown 的内部架构更偏向 esbuild 而非 Rollup,并且我们在代码块分割的逻辑处理上,也会与 Rollup 存在差异。
与此同时,Rolldown 涵盖的功能比 Rollup 更为广泛,与 esbuild 更为相似。它内部支持 CommonJS 规范、node_modules 的解析,并且计划在未来增加对 TypeScript/JSX 的转换以及代码压缩的支持。
Rolldown Roadmap
Rolldown 目前正处于积极开发阶段,还未适用于生产环境。Rolldown 开发团队选择开放源代码,以便开始与社区贡献者合作,推动 Rolldown 的发展。
图片
为了追求速度和更好地开发体验,在前端基建领域,越来越多工具采用 Rust 来构建。不过 Rust 学习成本挺高的,2024 年 Rust 你还学得动么?如果你已经上手 Rust,可以一起参与 Rolldown 开源项目。
参考资料
[1]Rolldown: https://rolldown.rs/
[2]Rust: https://www.rust-lang.org/
[3]esbuild: https://esbuild.github.io/
[4]Oxc: https://oxc-project.github.io/