龙空技术网

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

不秃头程序员 352

前言:

现时看官们对“js打包工具”大约比较重视,大家都需要知道一些“js打包工具”的相关知识。那么小编在网上收集了一些对于“js打包工具””的相关文章,希望大家能喜欢,姐妹们快快来了解一下吧!

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:

[2] Rust:

[3] esbuild:

[4] Oxc:

标签: #js打包工具