Cache
在编写 Rspack 插件时,可通过 compiler.getCache(name: string) 或 compilation.getCache(name: string) 获取缓存对象,以在构建流程中共享数据。缓存数据存储在 Compiler 上,因此可在 Watch 模式下的多次 Compilation 中使用。
注意
- 仅在 cache: true 时可用,在
mode="development"时默认开启。 - 仅用作 JavaScript 侧插件缓存,无法访问 Rust 侧缓存。
- 仅提供内存缓存,暂不提供持久化缓存。
示例
以下示例在 processAssets 阶段打印此次构建中新增的产物:
方法
缓存存取
get/getPromise
异步获取缓存数据,提供回调和 Promise 两种形式。
- 类型:
get:<T>(identifier: string, etag: Etag | null, callback: (err: Error, result: T) => void): voidgetPromise:<T>(identifier: string, etag: Etag | null): Promise<T>;
- 参数:
- identifier: 缓存项的标识
- etag: 数据项的唯一标识,可通过
getLazyHashedEtag生成
store/storePromise
异步存储缓存数据,提供回调和 Promise 两种形式。
- 类型:
store:<T>(identifier: string, etag: Etag | null, data: T, callback: (err: Error) => void): void;storePromise:<T>(identifier: string, etag: Etag | null): Promise<T>;
- 参数:
- identifier: 缓存项的标识
- etag: 数据项的唯一标识,可通过
getLazyHashedEtag生成
provide/providePromise
尝试获取缓存,不存在则通过函数生成并存储,提供回调和 Promise 两种形式。
- 类型:
provide:providePromise
- 参数:
- identifier: 缓存项的标识
- etag: 数据项的唯一标识,可通过
getLazyHashedEtag生成 - computer: 缓存数据提供方法
MyPlugin.js
输出
getLazyHashedEtag/mergeEtags
通过 getLazyHashedEtag 和 mergeEtags 方法可以创建一个 Etag 作为数据项唯一标识,它不会在创建时立即计算,而是在使用的时候延迟计算,并且能够被缓存。需以复杂数据对象作为唯一标识时使用可提升性能。
getLazyHashedEtag:(obj: HashableObject): Etag,计算对象的 hash 以获得 Etag 作为数据标识,对象需要实现updateHash(hash: Hash)方法。mergeEtags:(a: Etag, b: Etag): Etag,合并两个 Etag 作为数据标识。
MyPlugin.js
输出
getItemCache
通过 getItemCache 方法可创建一个针对单个数据项的缓存对象,该缓存对象提供了简化的数据存取接口,不再需要传输缓存标识和数据标识。
- 类型:
(identifier, etag): ItemCacheFacade
MyPlugin.js
输出
getChildCache
通过 getChildCache 方法可创建一个子缓存对象,其接口完全一致,可用于在缓存较多需要分组存储时使用。
- 类型:
(name: string): CacheFacade

