关于 Rolldown

原文:https://rolldown.rs/about

背景介绍:大家一定听过Rollup打包工具。而 Rolldown 是一个使用 Rust 编写的 JavaScript 打包工具,由 Vue 作者尤雨溪带队。命名都是和 Rollup 反着来的,叫 Rolldown。

简介

Rolldown 是一个使用 Rust 编写的 JavaScript 打包工具,旨在成为 Vite 中使用的未来打包工具。它提供了与 Rollup 兼容的 API 和插件接口,但在范围上更类似于 esbuild。

🚧 正在开发中

Rolldown 目前正在积极开发中,尚不适用于生产环境。但我们现在将其开源,以便与社区贡献者共同合作。

为什么我们要构建 Rolldown

Rolldown 的设计目标是成为 Vite 中未来的底层打包工具。

目前,Vite 在内部依赖于两个打包工具:

Vite 必须使用两个不同的打包工具,因为虽然它们都很出色,但它们各自缺少对方提供的某些功能:

  • esbuild 极速且功能丰富,但其输出,特别是在分块限制方面,对于打包应用程序并不理想。

  • Rollup 对于打包应用程序经过了成熟的测试,但比使用编译为本地语言的打包工具慢得多。

使用两个不同的打包工具在几个方面都不是最佳选择:

  • 输出之间的细微差异可能导致开发和生产构建之间的行为差异。

  • 用户源代码在生产构建期间将被不同的工具重复解析、转换和序列化,导致许多不必要的开销。

理想情况下,我们希望 Vite 可以利用一个提供本地级别性能、具有内置变换以避免解析/序列化开销、与 Rollup 兼容的插件接口以及适用于大规模应用程序的高级构建输出控制的单一打包工具。

这就是我们构建 Rolldown 的原因。

Rolldown 使用 Rust 编写,并构建在 Oxc 之上,目前正在利用其解析器和解析器。我们还计划在将来利用 Oxc 的变换器和最小化器。

我们的长期目标是使 Vite 用户(直接或间接通过框架)能够以最小的摩擦过渡到内部使用 Rolldown 的 Vite 版本。

同时,Rolldown 也将作为一个独立的打包工具直接可用。

Rollup 兼容性和差异

Rolldown 的目标是尽可能地与 Rollup 的 API 和插件接口保持一致,以便于采用。在简单的用例中,它可能能够作为一个可替代的工具。然而,在涉及高级选项时,尤其是在边缘情况下,可能会存在一些细微差异。

我们最初的目标是实现一个从 JS 到 Rust 的端口,但很快意识到为了达到最佳性能,我们必须优先以 Rust 工作的方式编写代码。Rolldown 的内部架构更接近 esbuild 而不是 Rollup,我们的分块逻辑可能与 Rollup 的不同。

Rolldown 的范围也比 Rollup 更大,更类似于 esbuild。它具有内置的 CommonJS 支持、node_modules 解析,并且将来还将支持 TypeScript / JSX 转换和代码最小化。

路线图

请查看 GitHub discussions 上的路线图。

加入我们!

Rolldown 还处于早期阶段。我们还有很多工作要做,没有社区贡献者的帮助,我们将无法完成这项任务。我们还在积极寻找更多有长期承诺改进 JavaScript 工具链的团队成员。

有用的链接

团队成员

Rolldown 项目最初由 Yinan Long(也称为 Brooooooklyn,NAPI-RS 的作者)创建,现在由 Evan YouVite 的创建者)领导。

Evan You

Yinan Long (Brooooooklyn)

Yunfei He

Kui Li (underfin)

2024-03-09

访问量 131

扫码关注公众号“前端微志”

第一时间获取新周刊

预览图片