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

概述

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

Rolldown 是什么?

Rolldown 项目最初由 Yian Long(又名Brooooooklyn,NAPI-RS的作者)创建,现在由 ViteVue 的作者尤雨溪(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 会议

相关推荐
k4m7v2pz1 小时前
把 Bevy 0.14 游戏移植到 R36S 掌机:一场与“无窗口系统“的搏斗
linux·rust·bevy·r36s·rk3326·开源掌机
doiito2 小时前
【Agent Harness】流马(Gliding Horse)DeepSeek Responses API 接入介绍
rust·系统设计·ai agent
用户059540174462 小时前
把AI对话记忆存储测试从手工改成Playwright+pytest,覆盖率从20%提到96%,回归时间缩短90%
前端·css
kyriewen2 小时前
别再这样写TypeScript了——Code Review中最常见的8个反模式
前端·javascript·typescript
名字还没想好☜3 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
午安~婉3 小时前
GitHub Token/ GitHub Stats统计显示图异常
前端·github·vercel·github token
码云之上3 小时前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978333 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒3 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
程序员黑豆4 小时前
鸿蒙应用开发:AttributeModifier 使用教程
前端·harmonyos