功能规划

当前文档列出了 Rspack 正在支持的一些重要功能,其中一部分功能已经在实现过程中,一部分将在 Rspack 未来的版本中实现。

更新时间:2024-10

Rspack 1.x 迭代

Rspack 将每隔 2~3 个月发布一个 minor 版本,minor 版本将包含一些重要的新功能和改进。

更快的 HMR

我们正在开发新版的 incremental build 实现,它将显著提升 Rspack 的 HMR 性能。

Rspack v1.1 版本将支持实验性启用该功能,并将在未来的版本中持续优化,直到默认启用。

持久化缓存

Persistent Cache 能够在多次构建中缓存构建的中间产物,显著减少二次构建的耗时,尤其是能够为大型项目带来很大的性能提升。

我们正在实现 Rspack 的 Persistent Cache 功能,并计划在 Rspack v1.2 版本中发布实验性支持。

可移植的缓存

Rspack 缓存能力的演进路线,是依次实现 memory cache、persistent cache 和 portable cache。目前 Rspack 已经实现了 memory cache,正在实现 persistent cache。

在这之后,我们计划进一步实现 portable cache,这意味着 Rspack 的构建缓存不仅是持久化的,同时也可以被移植到任何不同的环境和机器,这将帮助团队更好地利用缓存,并为分布式构建奠定基础。

Webpack API 对齐

由于 webpack 包含了大量的 API,我们需要逐步地进行支持。我们将根据社区的反馈,优先支持一些高频使用的 loaders 和 plugins。

稳定的 Rust API

目前,上层工具可以使用 JS API 来集成 Rspack,这提供了良好的扩展性。但是 Rust 和 JavaScript 存在通信开销,这在一定程度上限制了 Rspack 的性能。我们也提供了 SWC Wasm plugin 以支持扩展,但是 Wasm 的性能相比 native 语言仍然有一定差距,为了给上层工具提供更灵活的接入方式和更好的性能,我们计划开放 Rspack 的 Rust API 用于集成。

改进 ESM 产物

ESM 是 JavaScript 模块的标准,目前,我们正在改进 Rspack 和 webpack 对 ESM 产物的支持,并实现基于 Rspack 的 library 构建工具—— Rslib。这将帮助开发者更好地使用 Rspack 来构建 npm 包,并享受 ESM 带来的静态分析能力和 tree shaking 支持。

RSC 支持

在字节跳动内部,我们已经基于 Rspack 实验性地支持了 RSC(React Server Components),并在一个大型 web 项目中得到验证。未来 Rspack 将会为 RSC 提供一等公民的支持,提供更多的核心能力来帮助实现 RSC。例如,目前 Rspack 已经支持 layer 特性,能够在单次打包时构建出多种环境的产物。

基于 TypeScript 的优化

目前 Rspack 在处理 TypeScript 模块时,会先通过 loader 将其转换为 JavaScript 再处理。这虽然提供了充足的灵活性,但是也阻碍了进一步的产物优化。 例如,开发者需要使用 enum 替代 const enum,但是 enum 本身难以进行常量优化,未来我们考虑重新将 TypeScript 作为 Rspack 的一等公民,充分利用 TypeScript 的静态信息,提供更高级的编译产物优化(如 基于 type 的 property renaming)。