Incremental
incremental 控制 Rspack 是否在同一个长生命周期 compiler 的多次 compilation 之间复用未受影响的中间结果。它面向开发期重建、watch 模式和热模块替换(HMR):Rspack 已知发生变化的文件,因此可以避免重新计算未受影响的阶段和产物。
Incremental 仅在 mode 设置为 'development' 时启用。独立的 rspack build 是一次性构建,没有可供更新的上一次 compilation,因此 incremental 不会让多次独立的 build 命令变成增量构建。
- 类型:
boolean | 'none' | 'safe' | 'advance' | 'advance-silent' | Incremental - 默认值:
'advance-silent'
增量 Artifact 与 cache 相互独立。关闭缓存不会禁用开发、watch 或 HMR 场景中的增量重建。
与 Cache 的关系
cache 和 incremental 是两个相互独立的配置。Cache 将细粒度的计算结果保存在内存或基于文件系统的持久化存储中;Incremental 则从同一个 compiler 的上一次 compilation 中恢复上一轮 pass 的 Artifact,再根据已知 mutations 更新受影响的工作。
四种组合都有效:
Cache “开启”包括 cache: true、cache: { type: 'memory' } 和
cache: { type: 'persistent' }。
Rspack Incremental 的优化目标与 webpack 的
cacheUnaffected 类似:避免重新计算不受变更影响的工作。Rspack 将这一思路扩展到多个 compilation 阶段,并将其设计为独立于 Cache 的顶层能力。这是语义对齐,并不代表配置结构等价:webpack 要求 cacheUnaffected 与 Memory Cache 一起使用,而 Rspack 将 incremental 作为独立的顶层配置。
配置方式
incremental 支持预设值和对象两种配置方式。
大多数项目可以使用默认值;只有在需要关闭增量构建、回退到更保守的策略,或定位增量构建相关问题时,才需要显式配置。
配置示例
默认情况下无需显式配置 incremental。如果希望在开发过程中发现哪些配置或插件行为会导致增量阶段被关闭,可以使用 'advance':
也可以通过对象形式配置 incremental,对每个构建阶段的增量能力进行细粒度控制。对象配置主要用于调试或临时规避问题,常规场景推荐使用预设值。
使用对象配置时,省略的阶段选项默认值都是 true,silent 的默认值也是 true。例如,
{ modulesCodegen: false } 只会关闭该阶段,其他 Incremental 阶段仍然保持开启。
类型定义
性能影响
Incremental 只会在存在上一次 compilation 和明确变更集合时加速重建与 HMR,不会让首次 compilation 或独立的一次性 build 变成增量构建,但首次 compilation 仍会为后续重建准备 Artifact。
Memory Cache 或 Persistent Cache 可以独立加速首次构建和重建中的具体计算。尤其是进程启动后命中的 FileSystem Cache 属于 Cache 加速,而不是增量构建。

