Cache
cache 选项用于控制 Rspack 的缓存策略,让 Rspack 可以在构建之间复用缓存数据以提升构建性能。
- 类型:
- 默认值: development 模式为
{ type: 'memory' }(等价于true),production 模式和 none 模式为false
内存缓存
将 cache 设置为 true 或 { type: 'memory' } 可以启用内存缓存。内存缓存只保存在当前 compiler 进程中,主要用于 rebuild、watch 模式和 HMR。
内存缓存不会将缓存数据写入磁盘,因此进程结束后缓存会被清空,也无法加速后续重新启动的全新构建。它更适合开发阶段的长时间运行场景,例如同一个 compiler 实例持续处理多次重构建。
或:
持久化缓存
将 cache 设置为 { type: 'persistent' } 可以启用持久化缓存。持久化缓存会将缓存数据写入磁盘,以便后续构建进程复用。
buildDependencies
- 类型:
string[] - 默认值:
[]
cache.buildDependencies 是构建依赖的文件或目录路径数组。Rspack 会追踪这些路径,并在任意被追踪的构建依赖发生变化时使持久化缓存失效。
与 webpack 不同,Rspack 默认不预设任何构建依赖。建议将未被 Rspack CLI 加载的项目配置文件添加到 cache.buildDependencies,以确保这些文件变化时缓存能及时失效。
注意:使用 Rspack CLI 时,配置文件会自动被添加到 cache.buildDependencies 中。
解析构建依赖时,Rspack 会递归遍历目录,并通过 AST 解析 JS/TS 文件以追踪传递依赖。对于解析到 node_modules 下的依赖,Rspack 会停止递归解析,并在可用时追踪对应包的 package.json。
version
- 类型:
string - 默认值:
""
cache.version 是写入持久化缓存 key 的额外版本字符串。可以通过修改它来手动隔离或使持久化缓存失效。
不要在不同配置之间共享同一份缓存(相同的 cache.version 和 cache.storage.directory),这样可能导致错误的缓存命中。
除了 buildDependencies 校验和 version 外,持久化缓存 key 还包含 Rspack 版本、config.name、config.mode,以及会影响缓存内容的持久化缓存配置。
这些值发生变化时,Rspack 会隔离缓存,避免复用过期的持久化缓存数据。
portable
- 类型:
boolean - 默认值:
false
启用可移植缓存模式。启用后,生成的缓存内容可以在同一项目的不同平台和路径之间共享使用。
可移植缓存构建在持久化缓存之上,通过在序列化和反序列化过程中转换平台特定的数据(例如,将绝对路径转换为相对路径),使缓存具有平台无关性。
示例:
典型的使用场景是在 CI 环境中,Windows、Linux 和 macOS 可以使用同一份缓存进行加速,而不需要生成三份独立的缓存副本。
项目目录之外的文件(config.context 之外)会被转换为相对路径。如果这些文件在新环境中不存在,将会触发相关模块的重新构建。
readonly
- 类型:
boolean - 默认值:
false
启用只读缓存模式。启用后,缓存将仅从磁盘读取而不会被写入,这在 CI 环境中非常有用,可以使用预热的缓存而不修改它。
示例:
仅在 CI 启用:
snapshot
- 类型:
object - 默认值:
{ immutablePaths: [], managedPaths: [/[\\/]node_modules[\\/][^.]/], unmanagedPaths: [] }
配置持久化缓存的快照策略,用于判断自上次构建以来哪些依赖发生了变化。
snapshot.immutablePaths
- 类型:
(RegExp | string)[] - 默认值:
[]
不可变路径数组。从持久化缓存恢复时,Rspack 会将匹配的路径视为未变化,并且不会重新检查其内容。适用于写入后保证不再变化的内容寻址路径。
snapshot.managedPaths
- 类型:
(RegExp | string)[] - 默认值:
[/[\\/]node_modules[\\/][^.]/]
包管理器管理的路径数组。从持久化缓存恢复时,Rspack 会通过对应 package.json 中的 version 字段判断包是否发生变化,而不是对文件内容进行哈希。这可以加速对仅通过包管理器更新的依赖包的缓存校验。
snapshot.unmanagedPaths
- 类型:
(RegExp | string)[] - 默认值:
[]
指定 cache.snapshot.managedPaths 中不应被视为包管理器管理的路径。这些路径下的文件会回退到基于内容哈希的缓存校验。
storage
- 类型:
{ type: 'filesystem'; directory?: string; maxAge?: number; maxGenerations?: number }
配置缓存存储。目前仅支持文件系统存储。
storage.type
- 类型:
'filesystem' - 默认值:
'filesystem'
通过 type 设置缓存存储类型。目前仅支持文件系统存储。
storage.directory
- 类型:
string - 默认值:
node_modules/.cache/rspack/<mode>或node_modules/.cache/rspack/<name>-<mode>
通过 directory 设置缓存目录。默认目录会基于 config.context、config.name、config.mode 和 multi compiler 的 index 生成。在 multi compiler 模式下,后续 compiler 会追加 -<index> 以避免共享同一个目录。
不同 Compiler 应配置不同的 config.name 以确保使用不同的 cache.storage.directory,以避免缓存冲突。
storage.maxAge
- 类型:
number(正整数,单位为秒)或Infinity - 默认值:
7 * 24 * 60 * 60(7 天)
一份缓存数据在未被访问后允许保留的最长时间,单位为秒。清理时,Rspack 会删除超过 maxAge 时间未被访问的缓存数据。设置为 Infinity 可禁用基于时间的清理。
storage.maxGenerations
- 类型:
number(正整数)或Infinity - 默认值:
3
控制当前缓存目录最多保留多少个缓存版本。超过限制时,Rspack 会优先删除较旧且未处于当前使用状态的缓存版本。设置为 Infinity 可禁用基于数量的清理。
查看持久化缓存日志
持久化缓存相关日志会通过 rspack.persistentCache logger 输出。可以通过 stats.loggingDebug 开启这个 logger,在构建 stats 中查看这些日志:
日志会包含持久化缓存的关键信息,例如持久化缓存是否启用、构建依赖是否有效、缓存恢复是否成功,以及持久化缓存失效的原因。日志还会包含各缓存阶段的读写耗时(例如构建依赖校验、快照恢复、occasion 恢复、暂存以及刷盘)。
如果也想同时打印其他 logger 的日志,可以开启 stats.logging:
禁用缓存
将 cache 设置为 false 可以同时禁用内存缓存和持久化缓存。通常不建议禁用缓存,因为这会导致开发阶段的重构建显著变慢。
从 webpack 迁移
请参考 迁移 webpack - 缓存配置,了解如何将 webpack 缓存配置迁移到 Rspack。

