Rolldown 正式开源!未来将作为 Vite 的打包工具

概述

基于 Rust 的 JavaScrip 打包工具 Rolldown 正式开源,此前尤雨溪曾在 ViteConf 2023 会议上指出,Rolldown 是目前正在进行的一个新的项目,一个范围更大的 Rust 版本的 Rollup,并且最终将会其整合到 Vite 中。而 Rolldown 的重点则是性能,将会尽力与 Rollup API 兼容,目标是在对用户影响最小的情况下,在 Vite 上切换到 Rolldown。

Rolldown 是什么?

Rolldown 项目最初由 Yian Long(又名Brooooooklyn,NAPI-RS的作者)创建,现在由 Vite 和 Vue 的作者尤雨溪(Evan You)领导。

Rolldown 是基于字节跳动的 Oxc 工具集合构建的,它提供与 Rollup 兼容的应用程序接口和插件接口,但在范围内更类似于 esbuild,其内部架构也更接近于 esbuild 而不是 Rollup,代码块拆分逻辑最终可能会与 Rollup 的不同。

Rolldown 将作为 Vite 未来使用的打包工具,号称能够提供原生级性能,并能够避免解析/序列化开销的内置转换。Rolldown 将会与 Rspack 团队展开合作,在一些共享的底层工具和功能上,还会研究如何使用模块联邦在 Rspack 和 Vite 之间工作等。

Rolldown 与 Vite 的整合需要分阶段进行:

第一阶段专注于打包,目标是能够替代ES构建进行依赖预打包。

第二阶段是 Rollup 功能的对等性,最重要的是与 Rollup 插件生态系统的兼容性,还需要实现 Tree-shaking 和高级块分割控制,这一阶段的目标是在 Vite 的生产构建中能够使用 Rolldown 代替 Rollup。

第三阶段是针对一些内置的转换,例如,TypeScript、JSX、代码压缩和基于目标浏览器的语法降级等,其中 TypeScript 只会进行转译,它不会处理类型检查,仍需使用 TSC 进行类型检查。

第四阶段则是 Rustify Vite。从长远来看,如何更多的受益于本地级别的速度,实现这一目标的一种可能方式是通过 Rust API 让 Rolldown 公开插件容器。Vite 还将以 Rolldown 作为依赖项引入自己的 Rust 核心,这样才能实现 Rustify。

Vite 最终将会用 Rolldown 替换掉 esbuild 和 Rollup,其实并不是要替代它们而成为更好的替代品,主要目的是更好的满足我们在 Vite 中面临的独特的需求,最终使所有构建在 Vite 之上的用户受益。

值得注意的是,Rolldown 目前正在积极开发中,处于早期阶段,还不能用于生产。

为什么要开发 Rolldown?

由于 Vite 在开发环境是依赖于 esbuild 的,虽然 esbuild 速度极快且功能丰富,但其输出,在构建资源优化方面有非常有限的控制能力,没有太多方法来控制代码如何拆分。与 Rollup 相比,它的插件 API 也不够灵活,特别是在将多个插件链接在一起来处理相同的文件类型时,因此并不适合作为生产环境打包器。

而 Vite 在生产环境是依赖于 Rollup 的,采用了 Rollup 灵活的插件 API 和基础建设,这对 Vite 在生态中的成功起到了重要作用,虽然 Rollup 已经开始着手改进性能,在 v4 中将其解析器切换到 SWC,但是在生产环境下还是存在一定的构建性能问题,与原生的打包工具相比仍然较慢。

这两者在输出之间的细微差异可能会导致开发和生产构建之间的行为差异,例如,对 CommonJS 的处理和对模块转换的方式有时可能会有轻微的不一致性,这对于最终用户来说很难调试。而且用户源在整个生产构建过程中由不同的工具反复解析、转换和序列化,这导致了很多可以避免的开销。

正是因为 Vite 目前存在的问题,才导致 Vue 团队试图能够开发一款能够取代 Rollup 和 esbuild 的打包工具,既能够有原生的速度,又具有 Rollup 的灵活性和成熟性。

总结

基于 Rust 的打包工具 Rspack,基于 Rust 的 TypeScript/JavaScript 编译器 SWC,基于 Rust 的 JavaScript 语言的高性能工具集合 Oxc 等基于 Rust 开发的前端技术,它们在 Rust 领域探索前端工程化中都取得显著成就。这意味着以 Rust 为前端基建被证实,意味着传统的打包工具本身所带来的问题已经成为过去式, 前端工程化在性能方面将迎来出色的表现。我相信 RollDown 借助开源社区的力量,将会有着丰富的生态系统,丰富的应用场景和丰富的用户基数。

参考

Rolldown 官网

ViteConf 2023 会议

相关推荐
一水鉴天4 小时前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
栖凤4 小时前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python
粥里有勺糖4 小时前
视野修炼第136期 | 前端小恐龙"Deno"被收购
前端·github·ai编程
修炼的dance4 小时前
页面塞了13.88 MB字体,导出的PDF只有71 KB
前端
qq_369173634 小时前
如何将 AI 生成的 HTML 网页发布成在线链接?不用自己搭建服务器
前端·人工智能·html·效率工具·html 发布
风花一世月5 小时前
⚡ 我把一座含氢能源园区搬进了浏览器(五类能流实时算守恒,在线直接玩)
前端·人工智能
羲云5 小时前
Claude 越界事件之后:Agent 权限设计为什么不能只靠提示词
前端
对象存储与RustFS5 小时前
JuiceFS + 对象存储:把 S3 变成 POSIX 文件系统实测
后端·rust·开源
行者全栈架构师5 小时前
【鸿蒙心迹】鸿蒙网络请求架构实战——@ohos.net.http 到 Axios 封装、拦截器与统一错误处理(HarmonyOS 7.x)
前端·算法·架构
cindershade5 小时前
大包不是一个数字:Vite 构建体积的责任归因与边界治理
vite