Skip to content

简介

什么是 Bundler

在 JavaScript 开发中,bundler 负责将小段代码(ESM 或 CommonJS 模块)编译成更大更复杂的东西,例如库或应用程序。

对于 Web 应用程序,这可以使您的应用程序加载和运行速度显著加快(即使使用 HTTP/2)。对于库,这可以避免您的使用应用程序再次捆绑源代码,还可以提高运行时执行性能。

对于那些对细节感兴趣的人,我们已经对为什么仍然需要捆绑器 进行了更深入的分析。

为什么是 Rolldown

Rolldown 主要设计为 Vite 中的底层捆绑器,目标是用一个统一的构建工具取代 esbuildRollup(目前在 Vite 中用作依赖项)。这就是为什么我们要从头开始实现新的打包器:

  • 性能:Rolldown 是用 Rust 编写的。它的性能与 esbuild 相同,并且 比 Rollup 快 10 到 30 倍。它的 WASM 构建也 比 esbuild 快得多(由于 Go 的 WASM 编译不够理想)。

  • 生态系统兼容性:Rolldown 支持与 Rollup / Vite 相同的插件 API,确保与 Vite 现有的生态系统兼容。

  • 附加功能:Rolldown 提供了 Vite 所需的一些重要功能,但 esbuild 和 Rollup 不太可能实现这些功能(详情如下)。

尽管 Rolldown 是为 Vite 设计的,但它也完全能够用作独立的通用打包器。在大多数情况下,它可以作为 Rollup 的替代品,当需要更好的分块控制时,也可以用作 esbuild 的替代方案。

Rolldown 的功能范围

Rolldown 提供与 Rollup 基本兼容的 API(尤其是插件接口),并具有类似的 treeshaking 功能,用于优化打包大小。

但是,Rolldown 的功能范围与 esbuild 更相似,提供以下 附加功能 作为内置功能:

  • 平台预设
  • TypeScript / JSX / 语法降低转换
  • Node.js 兼容模块解析
  • ESM / CJS 模块互操作
  • define
  • inject
  • CSS 捆绑(实验性)
  • 压缩(WIP)

Rolldown 还有一些在 esbuild 中有相近概念但在 Rollup 中不存在的概念:

最后,Rolldown 提供了一些 esbuild 和 Rollup 未实现(也可能不打算实现)的功能:

致谢

如果没有我们从其他打包器(如 esbuildRollupwebpackParcel 中学到的所有经验教训,Rolldown 就不会存在。我们对这些重要项目的作者和维护者表示最崇高的敬意和感谢。

根据 MIT 许可证发布。