常用监听钩子
compiler 钩子
compiler.hooks.entryOption
在 webpack 选项中的 entry 被处理过之后调用。一般用来获取入口。
compiler.hooks.compile
beforeCompile 之后立即调用,但在一个新的 compilation 创建之前。这个钩子 不会 被复制到子编译器。能获取到normalModuleFactory和contextModuleFactory。
compiler.hooks.make
编译结束前,这个钩子 不会 被复制到子编译器。一般在操作资源时会用到。也会用来添加入口。
compiler.hooks.afterCompile
compilation 结束和封印之后执行。
Compiler.hooks.thisCompilation
初始化 compilation 时调用,在触发 compilation 事件之前调用。这个钩子 不会 被复制到子编译器。
compiler.hooks.compilation
compilation 创建之后执行。此阶段设置依赖对应的解析模板。可以获取到compilation和normalModuleFactory。
compiler.hooks.emit
输出 asset 到 output 目录之前执行。这个钩子 不会 被复制到子编译器。
compilation 钩子
Compilation.hooks.additionalAssets
可以获取此次编译的hash值。
compilation.hooks.processAssets
asset 处理,该阶段可以修改或删除编译的资源,此时获取的是assets原对象,如下图所示:
一般是要获取原资源的时候调用。
compilation.hooks.runtimeRequirementInChunk
操作运行时的模块。
compilation.hooks.additionalTreeRuntimeRequirements
添加运行时的依赖。
NormalModuleFactory Hooks
normalModuleFactory.hooks.factorize
在初始化解析依赖路径之前调用。它应该返回 undefined 以继续。
normalModuleFactory.hooks.module
在创建 NormalModule 实例后调用。可以获取到当前解析的模块。
normalModuleFactory.hooks.parser
在创建 Parser 实例后触发。
JavascriptParser Hooks
parser.hooks.expression
监听一段表达式,实现对表达式的处理。
parser.hooks.evaluateIdentifier
当用作判断的时候触发。
parser.hooks.import
import xxx from xxx
时触发
parser.hooks.statementIf
在解析 if 语句时触发;作用等同于 statement,但仅在 statement.type == ‘IfStatement’ 时触发。
if (a) { // 触发钩子
}
parser.hooks.program
所有代码都会被放入。可以查找自己需要的node,通过添加依赖的方式修改代码。
parser.hooks.call
执行函数的时候触发。