2025 年 1 月 21 日
Rspack v1.2 已经正式发布!
值得关注的变更如下:
在 Rspack v1.2 中,我们实验性的支持了持久化缓存,其会将构建中的缓存信息写入到存储介质中,加速下次 Rspack 的启动速度。
当构建命中缓存时,它可以在真实项目中带来高达 250% 的性能提升。
项目类型 | 模块数量 | Normal dev | Cold dev | Hot dev |
---|---|---|---|---|
初始项目 | 26 | 146 ms | 149 ms (+2%) | 134 ms (-8%) |
包含 10000 个模块的项目 | 10040 | 2.43 s | 2.43 s (+0%) | 1.16 s (-52%) |
包含 Less 文件的中型项目 | 1898 | 3.47 s | 3.55 s (+2%) | 0.92 s (-73%) |
大型真实项目 | 45968 | 93.3 s | 91.9 s (-1%) | 26 s (-72%) |
需要注意的是,持久化缓存目前仍处于实验阶段,当前仅支持构建过程中的 make 阶段(包括模块解析、转换等流程)。未来我们将持续优化,进一步提升缓存的性能和覆盖范围。
如果你在使用持久化缓存时遇到任何问题,欢迎通过 GitHub Issues 反馈。
详情请参考 experiments.cache。
Rspack 迎来了对 Yarn PnP 的支持,其默认根据 process.versions.pnp
(即应用在 Yarn PnP 环境中运行时)来进行开启,也可以将 resolve.pnp
配置为 true
来强制开启。
在此特别感谢 @arcanis(Yarn 的维护者),为 Rspack 的 resolver 实现了 PnP 解析。
详情请参考 resolve.pnp。
在之前的 Rspack 版本中,code splitting 算法在 HMR 下会占用大量的耗时,在 Rspack v1.2 中,我们实现了全新的 code splitting 算法,它支持多线程,增量构建效率更高。如果你的代码库包含大量动态导入,code splitting 可能会花费大量时间,开启这项新功能可以显著提高 code splitting 的性能。
Rspack v1.2 将不再监听 node_modules
和 .git
目录下的文件变动,这将显著减少监听的文件数目并带来性能提升。
通过 benchmark 仓库 中的数据,这项调整将:
这个变更不会影响 monorepo 中的符号链接资源,因为 Rspack 默认将符号链接资源解析为它的真实路径。
如果你倾向于保持之前的行为,可以设置 :
详情请参考 watchOptions.ignored。
我们优化了在 rspack-sources 计算过程中用于存储字符串的数据结构。在整个计算过程中,所有字符串数据都指向根节点的字符串堆内存,有效避免了计算过程中产生新的字符串分配。
Rspack v1.2 将 SWC 压缩器的默认 passes
设置为 2
,以减少 1%-7% 的打包体积。
passes 是运行压缩的最大次数。在某些情况下,多次压缩可以产生更小的代码。考虑到 Rspack 本身的性能优势,我们将默认值设为 2
以在构建性能和打包体积之间取得最佳平衡。
详见:feat: set default SWC minimizer passes to 2 to reduce bundle size。
我们对副作用优化的实现进行了重构,采用了更简洁且更易并行化的方案。通过充分利用多线程并行处理能力,在测试项目中,这个阶段的性能获得了 2-3 倍的提升。
Nx 团队的核心成员 Colum Ferry 为 Rspack 生态带来了完整的 Angular 支持。
通过新发布的 @ng-rsbuild/plugin-angular
和 @ng-rspack/build
包,开发者现在可以使用 Rspack 或 Rsbuild 来构建 Angular 应用,获得更快的构建性能和模块联邦等特性。
欢迎访问 ng-rspack-build 仓库了解详细信息。
Rsbuild v1.2 已经与 Rspack v1.2 同步发布,并带来了多项新特性:
详情请参考 Rsbuild v1.2.0。
在 Rspack v1.2 中,Rust 依赖包 swc_core
的版本已升级到 10.1.0
。SWC Wasm 插件的用户需要确保与正在使用的 swc_core
版本一致,否则可能会导致意外问题。
详情请参考 常见问题 - SWC 插件版本不匹配。
WarnCaseSensitiveModulesPlugin 插件用于检查模块的路径,并对路径全部为小写的冲突模块发出警告。Rspack 过去默认启用它,但由于它只是一个 linter 插件,并且它在开发模式下会产生额外的性能开销。所以现在 Rspack 默认禁用了这项功能。
如果你倾向于保持之前的行为,可以设置: