Compilation 钩子是 Rspack 插件的主要扩展方式,为开发者提供了介入构建流程各阶段的能力。
本文档列举了 Rspack 中可用的 Compilation 钩子、它们的触发时机、参数以及使用示例。
查看 Compilation 了解更多关于 Compilation 对象的信息。
Rspack 的主要编译逻辑运行在 Rust 侧。出于稳定性、性能、架构等因素,在使用钩子时,Rust 侧编译对象传输到 JavaScript 侧后,对 JavaScript 侧的修改不会被同步到 Rust 侧。因此绝大部分钩子为“只读”。
buildModule在模块被构建之前调用。
SyncHook<[Module]>Module:模块实例executeModule若存在编译期执行模块,将在模块被执行时调用。
SyncHook<[ExecuteModuleArgument, ExecuteModuleContext]>ExecuteModuleArgument:模块运行参数ExecuteModuleContext:模块运行上下文succeedModule在模块成功构建后调用。
SyncHook<[Module]>Module:模块实例finishModules当所有模块都没有错误地构建完成时调用。
AsyncSeriesHook<[Module[]]>Module[]:所有模块列表optimizeModules在模块优化阶段开始时调用。
SyncBailHook<[Module[]]>Module[]:所有模块列表seal停止接收新模块并开始优化前触发。
SyncHook<[]>afterOptimizeModules在模块优化完成之后调用。
SyncBailHook<[Module[]]>Module[]:所有模块列表optimizeTree在优化依赖树之前调用。
AsyncSeriesHook<[Chunk[], Module[]]>Chunk[]:Chunk 列表:Module[]:模块列表optimizeChunkModules在树优化之后,chunk 模块优化开始时调用。
AsyncSeriesBailHook<[Chunk[], Module[]]>Chunk[]:Chunk 列表:Module[]:模块列表additionalTreeRuntimeRequirements在树运行时依赖计算完成后调用。
SyncHook<[Chunk, Set<RuntimeGlobals>]>Chunk:Chunk 实例Set<RuntimeGlobals>:运行时依赖集合可通过修改运行时依赖集合以添加额外的内置运行时模块:
runtimeRequirementInTree在根据运行时依赖以添加运行时模块时调用。
HookMap<SyncBailHook<[Chunk, Set<RuntimeGlobals>]>>Chunk:Chunk 实例Set<RuntimeGlobals>:运行时依赖集合可通过修改运行时依赖集合以添加额外的内置运行时模块,也可通过 compilation.addRuntimeModule 添加自定义运行时模块:
runtimeModule在运行时模块被添加后调用。
SyncHook<[RuntimeModule, Chunk]>RuntimeModule:运行时模块Chunk:Chunk 实例可通过 source 字段修改该运行时模块生成的代码。
processAssets在产物输出之前进行修改产物。
AsyncSeriesHook<Assets>name: string — 插件的名称stage: Stage — 要处理的阶段(参考 Process assets stages)Assets: Record<string, Source>: 一个对象,其中 key 是 asset 的路径名,值是由 Source 表示的 asset 数据。PROCESS_ASSETS_STAGE_ADDITIONAL 阶段输出一个新的 asset:下面是支持的 stage 列表,Rspack 会按由上至下的顺序依次执行这些 stages,请根据你需要进行的操作来选择合适的 stage。
PROCESS_ASSETS_STAGE_ADDITIONAL — 在编译中添加额外的 asset。PROCESS_ASSETS_STAGE_PRE_PROCESS — asset 进行了基础的预处理。PROCESS_ASSETS_STAGE_DERIVED — 从现有 asset 中派生新的 asset。PROCESS_ASSETS_STAGE_ADDITIONS — 为现有的 asset 添加额外的内容,例如 banner 或初始代码。PROCESS_ASSETS_STAGE_OPTIMIZE — 以通用的方式优化现有 asset。PROCESS_ASSETS_STAGE_OPTIMIZE_COUNT — 优化现有 asset 的数量,例如,进行合并操作。PROCESS_ASSETS_STAGE_OPTIMIZE_COMPATIBILITY — 优化现有 asset 的兼容性,例如添加 polyfills 或者 vendor prefixes。PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE — 优化现有 asset 的大小,例如进行压缩或者删除空格。PROCESS_ASSETS_STAGE_DEV_TOOLING — 为 asset 添加开发者工具,例如,提取 source map。PROCESS_ASSETS_STAGE_OPTIMIZE_INLINE — 将 asset 内联到其他 asset 中来优化现有 asset 数量。PROCESS_ASSETS_STAGE_SUMMARIZE — 整理现有 asset 列表。PROCESS_ASSETS_STAGE_OPTIMIZE_HASH — 优化 asset 的 hash 值,例如,生成基于 asset 内容的真实 hash 值。PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER — 优化已有 asset 的转换操作,例如对 asset 进行压缩,并作为独立的 asset。PROCESS_ASSETS_STAGE_ANALYSE — 分析已有 asset。PROCESS_ASSETS_STAGE_REPORT — 创建用于上报的 asset。afterProcessAssets在 processAssets hook 无错误执行后调用。
SyncHook<Assets>Assets: Record<string, Source>:产物资源映射表afterSeal在 seal 阶段结束后调用。
AsyncSeriesHook<[]>chunkHash触发来为每个 chunk 生成 hash。
SyncHook<[Chunk, Hash]>Chunk:Chunk 实例Hash:Chunk 哈希实例chunkAsset一个 chunk 中的一个 asset 被添加到 compilation 时调用。
SyncHook<[Chunk, string]>Chunk:Chunk 实例string:产物文件名childCompiler创建子 compiler 之后调用。
SyncHook<[Compiler, string, number]>Compiler:子编译实例:string:子编译名称number:子编译索引statsPreset当使用预设 stats 配置时触发。接收一个 stats 配置对象,当插件管理 stats 预设配置时,它应当在配置对象上仔细地修改,而非直接替换整个配置对象。
SyncHook<[Partial<StatsOptions>, CreateStatsOptionsContext]>Partial<StatsOptions>:Stats 配置CreateStatsOptionsContext:Stats 上下文以如下插件为例:
该插件确保对于预设 "my-preset",如果 all 选项未定义,则默认为 true。
statsNormalize此钩子用于将选项对象转换为便于后续钩子使用的格式。它还确保缺失的选项被设置为默认值。
SyncHook<[Partial<StatsOptions>, CreateStatsOptionsContext]>Partial<StatsOptions>:Stats 配置CreateStatsOptionsContext:Stats 上下文以如下插件为例:
在这个插件中,如果 myOption 缺失,会将其设置为 []。此外,它确保 myOption 始终是一个数组,即使它最初被定义为单个值。
statsFactory此钩子提供了对 StatsFactory 的访问,以调用其钩子。该类用于构造 Stats 对象。
SyncHook<[StatsFactory, StatsOptions]>StatsFactory:Stats 工厂实例,详见 Stats Factory 钩子StatsOptions:Stats 配置statsPrinter此钩子提供了对 StatsPrinter 的访问,以调用其钩子。该类用于打印 Stats 信息。
SyncHook<[StatsPrinter, StatsOptions]>StatsPrinter:Stats 打印实例,详见 Stats Printer 钩子StatsOptions:Stats 配置