Rolldown——基于Rust的与Rollup兼容的JavaScript快速编译器

418 阅读3分钟

Rolldown目前正在积极开发中,还不能用于生产。预计到 2024 年年底将进入测试阶段。

Rolldown是什么

Rolldown 是一个用Rust编写的JavaScript编译器,Rolldown是用Rust编写的,构建在Oxc之上,目前利用其parser and resolver,未来还计划利用Oxc的Transformer和minifier。Rolldown 提供了Rollup兼容的 API 和插件接口,Rolldown的作用域也比Rollup大,并且更类似于 Esbuild,它带有内置的CommonJS支持,node_modules解析,将来还将支持TypeScript / JSX transforms 以及 minification。

Rolldown的目标

Rolldown旨在作为Vite中使用的未来编译器。Rolldown的长期目标是让Vite用户(直接或间接通过框架)能够过渡到内部使用Rolldown的Vite版本,并将摩擦降至最低。除了内置在 Vite中,Rolldown也可以直接用作一个独立的插件。

有人说Rolldown 是 Rollup 的 Rust 重写,Rspack 是 webpack 的 Rust 重写。但从Evan you发布的路线图(见下文)来看,Rolldown不知要替代 Rollup,也要替代 Esbuild,最终使得 使用Vite 也能够得到开发和生产一致的体验。

Rolldown的路线图

github.com/rolldown/ro…

里程碑 1:Basic Bundling

目标:能够使用 Rolldown 代替 esbuild 在 Vite 中进行依赖预捆绑。

所需的关键功能:

  • 多个入口点的基本代码分割
  • cjs/esm 混合捆绑
  • 基本插件支持

里程碑 2: Advanced Bundling

目标:能够在 Vite 中使用 Rolldown 进行生产构建。

所需的关键功能:

  • Treeshaking
  • Basic CLI & config file 支持
  • Source map
  • Chunk hashing 块散列
  • Rollup 插件兼容性 WIP
  • Advanced chunk splitting
  • Built-in CSS bundling
  • Module Federation 模块联盟

里程碑 3: Transform Features

目标:能够将 Rolldown 用于 Vite 中当前所有 esbuild 的使用。这些功能将依赖于与 Rolldown 并行开发的 oxc。我们希望将它们集成到 Rolldown 中,以便我们可以尽可能地重用相同的 AST。

所需的关键功能:

  • 内置 Typescript / JSX transform (通过 oxc)
  • Built-in minification 内置缩小
  • 计划使用 LightningCSS 开发 CSS 缩小器和 Rolldown 中的 CSS 转换,
  • 同时借助 oxc 来缩小和转换 JavaScript
  • Syntax lowering 语法降低 (通过 oxc)

里程碑4:更深层次的Vite 集成

替换 Vite 中的 esbuild 和 Rollup。将性能关键的 Vite 内部插件移植到 Rust。

暂定的未来项目:

  • 将插件容器公开为 Rolldown API。
  • Port Vite 的 SSR 转换(在ssrLoadModule中使用)到 Rust,消除 SSR 外部。
  • Vite中的全捆绑模式(适用于模块过多的情况)。

为什么不逐步改进Rollup

Vite站在巨人的肩膀上,它的成功很大程度上归功于Rollup。但是考虑到JavaScript的单线程特性和编译器的复杂性,通过逐步改进Rollup实现增量更改进而实现目标性能水平是极不可能的。考虑到:1.将部分组件迁移到Rust所带来的性能提升通常会被Rust和JavaScript之间传递数据的成本所抵消,2.为了实现最佳性能,整个解析/转换/代码生成管道(parse / transform / codegen pipeline)需要在本机端进行,并尽可能并行化。所以 Rolldown团队必须优先考虑以符合Rust工作方式的方式重新编写代码。

Rolldown官网:rolldown.rs/about

关于作者

作者:Wandra

内容:算法 | 趋势 |源码|Vue | React | CSS | Typescript | Webpack | Vite | GithubAction | GraphQL | Uniqpp。

专栏:欢迎关注呀🌹

本专栏致力于分享技术趋势,如果本文对你有帮助的话,欢迎点赞或者关注☘️