在 ViteConf 2023 线上会议上,尤雨溪发表了《The State of Vite》的演讲,分享了 Vite 的现状和未来的计划。其中,一个值得关注的消息是 Vite 团队正在开发 Rolldown,这是一个基于 Rust 的 Rollup 移植版。
为什么要重新写一个打包工具?
Vite 目前底层使用 esbuild 和 Rollup 两个打包工具,在这些打包工具层次上仍然存在需要解决的问题,尤大在会上列举了用户反馈的一系列痛点:
- 生产环境构建速度相对较慢。
- 开发环境和生产环境之间不一致。
- 开发环境下未打包的 ESM 模块会带来额外的网络开销。
- SSR 外部依赖设置(externals)使用起来容易产生困惑。
- 对代码分割的控制能力有限。
- 暂时缺乏对 Module Federation(模块联邦)的内置支持。
esbuild 或 Bun 非常快速,为什么不使用?
尽管 esbuild 和 Bun 的构建速度很快,但它们在优化和控制资源方面的能力有限,而且它们提供的插件 API 不够灵活。
为什么放弃 Rollup?
Rollup 功能成熟且灵活,但速度较慢,对 ESM/CJS 互操作的支持也存在一些问题。
为什么不用 Turbopack?
Turbopack 是 Vercel 公司开发的 Web 构建工具,它使用 Rust 语言开发,具有高性能、兼容、可定制的特点。
考虑到目前 Turbopack 只能用在 Next 项目中,对于如何与 js 插件一起工作还没有明确前景,许多内部设计决策也不能 Vite 中得到良好的支持。
为什么不用 Rspack?
Rspack 也是基于 Rust 语言开发的 Web 构建工具,尤大在 X 上提到,相比起 Turbopack 来说,选择 Rspack 反而会更优,不过 Rspack 严重依赖 webpack 模式,与当前 Vite 模式不相符,需要优先考虑现有 Vite 用户的兼容性。
最后,Rolldown 仍处于早期的开发阶段,它还有很长的路要走才能真正替代 Vite 底层的打包工具。至于 Rust 在前端工具链中的使用越来越多,它也将影响着前端领域的未来方向。因此,我们有必要考虑是否要学习一门新的语言。