Vite 未来使用的打包工具,正式开源了!

2024年 3月 11日 35.4k 0

3 月 8 号,Rolldown[1] 正式开源了,它是一个基于 Rust[2] 语言开发的 JavaScript 打包器,其设计目标是成为 Vite 在未来将要采用的核心打包工具。它不仅提供了与 Rollup 兼容的 API 和插件体系,而且在功能范围上,它更加贴近于 esbuild[3] 的设计理念。

图片图片

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/

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论