title | group | sort | contributors | translators | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
compiler 钩子 |
Plugins |
9 |
|
|
Compiler
模块是 webpack 的主要引擎,它通过 CLI 或者 Node API
传递的所有选项创建出一个 compilation 实例。
它扩展(extends)自 Tapable
类,用来注册和调用插件。
大多数面向用户的插件会首先在 Compiler
上注册。
在为 webpack 开发插件时,你可能需要知道每个钩子函数是在哪里调用的。想要了解这些内容,请在 webpack 源码中搜索 hooks.<hook name>.call
。
Compiler
支持可以监控文件系统的 监听(watching) 机制,并且在文件修改时重新编译。
当处于监听模式(watch mode)时,
compiler 会触发诸如 watchRun
, watchClose
和 invalid
等额外的事件。
通常在 开发环境 中使用,
也常常会在 webpack-dev-server
这些工具的底层调用,
由此开发人员无须每次都使用手动方式重新编译。
还可以通过 CLI 进入监听模式。
以下生命周期钩子函数,是由 compiler
暴露,
可以通过如下方式访问:
compiler.hooks.someHook.tap('MyPlugin', (params) => {
/* ... */
});
取决于不同的钩子类型,也可以在某些钩子上访问 tapAsync
和 tapPromise
。
关于钩子类型的描述,请查看 Tapable 文档.
SyncHook
在编译器准备环境时调用,时机就在配置文件中初始化插件之后。
SyncHook
当编译器环境设置完成后,在 environment
hook 后直接调用。
SyncBailHook
在 webpack 选项中的 entry
被处理过之后调用。
compiler.hooks.entryOption.tap('MyPlugin', (context, entry) => {
/* ... */
});
SyncHook
在初始化内部插件集合完成设置之后调用。
- 回调参数:
compiler
SyncHook
resolver 设置完成之后触发。
- 回调参数:
compiler
SyncHook
当编译器对象被初始化时调用。
AsyncSeriesHook
在开始执行一次构建之前调用,compiler.run 方法开始执行后立刻进行调用。
- 回调参数:
compiler
AsyncSeriesHook
在开始读取 records
之前调用。
- 回调参数:
compiler
AsyncSeriesHook
在监听模式下,一个新的 compilation 触发之后,但在 compilation 实际开始之前执行。
- 回调参数:
compiler
SyncHook
NormalModuleFactory 创建之后调用。
- 回调参数:
normalModuleFactory
SyncHook
ContextModuleFactory 创建之后调用。
- 回调参数:
contextModuleFactory
AsyncSeriesHook
在创建 compilation parameter 之后执行。
- 回调参数:
compilationParams
初始化 compilationParams
变量的示例如下:
compilationParams = {
normalModuleFactory,
contextModuleFactory,
};
此钩子可用于添加/修改 compilation parameter:
compiler.hooks.beforeCompile.tapAsync('MyPlugin', (params, callback) => {
params['MyPlugin - data'] = 'important stuff my plugin will use later';
callback();
});
SyncHook
beforeCompile
之后立即调用,但在一个新的 compilation 创建之前。这个钩子 不会 被复制到子编译器。
- 回调参数:
compilationParams
SyncHook
初始化 compilation 时调用,在触发 compilation
事件之前调用。这个钩子 不会 被复制到子编译器。
- 回调参数:
compilation
,compilationParams
SyncHook
compilation 创建之后执行。
- 回调参数:
compilation
,compilationParams
AsyncParallelHook
compilation 结束之前执行。这个钩子 不会 被复制到子编译器。
- 回调参数:
compilation
AsyncSeriesHook
compilation 结束和封印之后执行。
- 回调参数:
compilation
SyncBailHook
在输出 asset 之前调用。返回一个布尔值,告知是否输出。
- 回调参数:
compilation
compiler.hooks.shouldEmit.tap('MyPlugin', (compilation) => {
// 返回 true 以输出 output 结果,否则返回 false
return true;
});
AsyncSeriesHook
输出 asset 到 output 目录之前执行。这个钩子 不会 被复制到子编译器。
- 回调参数:
compilation
AsyncSeriesHook
输出 asset 到 output 目录之后执行。这个钩子 不会 被复制到子编译器。
- 回调参数:
compilation
AsyncSeriesHook
在 asset 被输出时执行。此钩子可以访问被输出的 asset 的相关信息,例如它的输出路径和字节内容。
- 回调参数:
file
,info
例如,可以通过 info.content
访问 asset 的内容 buffer:
compiler.hooks.assetEmitted.tap(
'MyPlugin',
(file, { content, source, outputPath, compilation, targetPath }) => {
console.log(content); // <Buffer 66 6f 6f 62 61 72>
}
);
AsyncSeriesHook
在 compilation 完成时执行。这个钩子 不会 被复制到子编译器。
- 回调参数:
stats
AsyncSeriesHook
This hook allows you to do a one more additional pass of the build.
SyncHook
在 compilation 失败时调用。
- 回调参数:
error
SyncHook
在一个观察中的 compilation 无效时执行。这个钩子 不会 被复制到子编译器。
- 回调参数:
fileName
,changeTime
SyncHook
在一个观察中的 compilation 停止时执行。
AsyncSeriesHook
当编译器关闭时调用。
SyncBailHook
在配置中启用 infrastructureLogging
选项 后,允许使用 infrastructure log(基础日志)。
- 回调参数:
name
,type
,args
SyncBailHook
启用后允许记录到 stats 对象,请参阅 stats.logging
, stats.loggingDebug
和 stats.loggingTrace
选项。
- 回调参数:
origin
,logEntry