Compiler hooks 允许 Rspack 插件在特定阶段介入构建流程。它们代表了从初始化到资源输出的各个生命周期阶段。
本文档列举了 Rspack 中可用的 Compiler 钩子、它们的触发时机、参数以及使用示例。
查看 Compiler 了解更多关于 Compiler 对象的信息。
environment在编译器准备环境时,初始化插件之后调用。
SyncHook<[]>afterEnvironment当编译器环境准备完成后,在 environment 钩子后直接调用。
SyncHook<[]>entryOption在 Rspack 选项中的 entry 被处理过之后调用。
SyncBailHook<[string, EntryNormalized]>afterPlugins在初始化内部插件完成之后调用。
SyncHook<[Compiler]>Compiler: 当前 Compiler 实例afterResolversresolver 设置完成之后触发。
SyncHook<[Compiler]>Compiler: 当前 Compiler 实例initialize当编译器被初始化时调用。
SyncHook<[]>beforeRun在开始执行一次构建之前调用。
这个钩子仅在调用 compiler.run() 时触发(对应 rspack build 命令),在监听模式(watch mode)下不会执行。在监听模式下,你可以使用 watchRun 钩子。
AsyncSeriesHook<[Compiler]>Compiler: 当前 Compiler 实例run在开始执行一次构建时调用。
这个钩子仅在调用 compiler.run() 时触发(对应 rspack build 命令),在监听模式(watch mode)下不会执行。在监听模式下,你可以使用 watchRun 钩子。
AsyncSeriesHook<[Compiler]>Compiler: 当前 Compiler 实例watchRun在监听模式下,开始执行一次构建时调用。
你可以通过 compiler.modifiedFiles 和 compiler.removedFiles 获取变更的文件路径和删除的文件路径。
这个钩子仅在调用 compiler.watch() 时触发,在非监听模式下不会执行。在非监听模式下,你可以使用 run 或 beforeRun 钩子。
AsyncSeriesHook<[Compiler]>Compiler: 当前 Compiler 实例beforeCompile在编译参数创建后执行插件。
AsyncSeriesHook<[]>compile在一个新的 compilation 对象 被创建之前调用。
SyncHook<[]>thisCompilation在创建 compilation 对象时调用,用于获取当前的 compilation 对象。
你可以通过 compilation 参数来访问 compilation 对象的属性,或是注册 compilation hooks。
SyncHook<[Compilation]>compilation: 创建的 compilation 对象compilation在 compilation 对象创建之后调用,用于获取当前的 compilation 对象。
你可以使用 compilation 参数来访问 compilation 对象的属性,或是注册 compilation hooks。
compilation 钩子的调用晚于 thisCompilation 钩子,并且 thisCompilation 钩子不会被复制到 child compiler 中,而 compilation 钩子会被复制到 child compiler 中。
SyncHook<[Compilation]>compilation: 创建的 compilation 对象make在 make 阶段开始前调用,在 make 阶段会以 entry 为起点构建模块依赖图,并使用 loader 处理各个模块。
AsyncParallelHook<[Compilation]>Compilation: 当前 Compilation 对象finishMake在 make 阶段结束后调用。在 make 阶段,Rspack 会以 entry 为起点构建模块依赖图,并使用 loader 处理各个模块,当这个过程完成时会触发此钩子。
AsyncSeriesHook<[Compilation]>Compilation: 当前 Compilation 对象afterCompile在 make 阶段结束后 seal 阶段开始前调用,在 seal 阶段会从模块图优化并创建 chunk 图,以生成产物信息。
AsyncSeriesHook<[Compilation]>Compilation: 当前 Compilation 对象shouldEmit返回值为一个布尔值,用于决定是否将资源写入到磁盘中。
SyncBailHook<[Compilation], boolean>Compilation: 当前 Compilation 对象emit在产物输出到结果目录前执行。
AsyncSeriesHook<[Compilation]>Compilation: 当前 Compilation 对象afterEmit输出产物到结果目录后执行。
AsyncSeriesHook<[Compilation]>Compilation: 当前 Compilation 对象done当前 Compilation 处理完成时执行。
AsyncSeriesHook<Stats>Stats: 生成的 Stats 对象afterDone当前 Compilation 处理完成且 done 钩子调用之后执行。
SyncHook<Stats>Stats: 生成的 Stats 对象failed当前 Compilation 失败时调用。
SyncHook<[Error]>invalid当监听模式下的编译因文件变更而失效时执行。这个 hook 不会被复制到 child compiler 中。
SyncHook<[string | null, number]>fileName: 失效的文件路径changeTime: 失效的文件修改时间戳在触发重新编译时,这个 hook 可以用于获取变更的文件路径和修改时间,例如:
watchClose停止监听时调用。
SyncHook<[]>shutdown当前 Compiler 关闭时调用。
AsyncSeriesHook<[]>当基础设施日志被触发时调用,允许插件拦截、修改或处理日志消息。
此钩子提供了一种自定义 Rspack 基础设施日志的方法 - 你可以过滤特定的日志类型、添加自定义格式,或完全覆盖默认的日志行为。
如果钩子返回 true,将阻止默认的基础设施日志记录。如果返回 undefined,将继续执行默认的日志输出。
SyncBailHook<[string, string, any[]], true | void>name:logger 的名称type:log 类型(例如 'log'、'warn'、'error' 等)args:传递给 logger 方法的参数数组查看 infrastructureLogging 了解更多关于基础设施日志的信息。