compiler 钩子

Compiler 模块是 webpack 的支柱引擎,它通过 CLINode API 传递的所有选项,创建出一个 compilation 实例。它扩展(extend)自 Tapable 类,以便注册和调用插件。大多数面向用户的插件首,会先在 Compiler 上注册。

此模块会暴露在 webpack.Compiler,可以直接通过这种方式使用。关于更多信息,请查看这个示例

在为 webpack 开发插件时,你可能需要知道每个钩子函数是在哪里调用的。想要了解这些,请在 webpack 源码中搜索 hooks.<hook name>.call

监听(watching)

Compiler 支持可以监控文件系统的监听(watching)机制,并且在文件修改时重新编译。当处于监听模式(watch mode)时,compiler 会触发诸如 watchRun, watchCloseinvalid 等额外的事件。通常用于开发环境中使用,也常常会在 webpack-dev-server 这些工具的底层之下调用,由此开发人员无须每次都使用手动方式重新编译。还可以通过 CLI 进入监听模式。

相关钩子

以下生命周期钩子函数,是由 compiler 暴露,可以通过如下方式访问:

  1. compiler.hooks.someHook.tap(/* ... */);

取决于不同的钩子类型,也可以在某些钩子上访问 tapAsynctapPromise

关于钩子类型的描述,请查看 Tapable 文档

entryOption

SyncBailHook

在 webpack 选项中的 entry 配置项 处理过之后,执行插件。

afterPlugins

SyncHook

设置完初始插件之后,执行插件。

参数:compiler

afterResolvers

SyncHook

resolver 安装完成之后,执行插件。

参数:compiler

environment

SyncHook

environment 准备好之后,执行插件。

afterEnvironment

SyncHook

environment 安装完成之后,执行插件。

beforeRun

AsyncSeriesHook

compiler.run() 执行之前,添加一个钩子。

参数:compiler

run

AsyncSeriesHook

开始读取 records 之前,钩入(hook into) compiler。

参数:compiler

watchRun

AsyncSeriesHook

监听模式下,一个新的编译(compilation)触发之后,执行一个插件,但是是在实际编译开始之前。

参数:compiler

normalModuleFactory

SyncHook

NormalModuleFactory 创建之后,执行插件。

参数:normalModuleFactory

contextModuleFactory

ContextModuleFactory 创建之后,执行插件。

参数:contextModuleFactory

beforeCompile

AsyncSeriesHook

编译(compilation)参数创建之后,执行插件。

参数:compilationParams

compile

SyncHook

一个新的编译(compilation)创建之后,钩入(hook into) compiler。

参数:compilationParams

thisCompilation

SyncHook

触发 compilation 事件之前执行(查看下面的 compilation)。

参数:compilation

compilation

SyncHook

编译(compilation)创建之后,执行插件。

参数:compilation

make

AsyncParallelHook

参数:compilation

afterCompile

AsyncSeriesHook

参数:compilation

shouldEmit

SyncBailHook

此时返回 true/false。

参数:compilation

emit

AsyncSeriesHook

生成资源到 output 目录之前。

参数:compilation

afterEmit

AsyncSeriesHook

生成资源到 output 目录之后。

参数:compilation

done

AsyncSeriesHook

编译(compilation)完成。

参数:stats

failed

SyncHook

编译(compilation)失败。

参数:error

invalid

SyncHook

监听模式下,编译无效时。

参数:fileName, changeTime

watchClose

SyncHook

监听模式停止。


贡献人员

byzyk byzyk madhavarshney madhavarshney rishantagarwal rishantagarwal