编译器钩子

Compiler 模块是创建编译实例的主要引擎,它包含通过 CLINode API 传递的所有选项。它扩展了 Tapable 类以注册和调用插件。大多数面向用户的插件首先在 Compiler 上注册。

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

观察

Compiler 支持 观察,它会监控文件系统并在文件更改时重新编译。在观察模式下,编译器将发出额外的事件,例如 watchRunwatchCloseinvalid。这通常用于 开发,通常在像 webpack-dev-server 这样的工具的内部使用,这样开发人员就不需要每次手动重新编译。观察模式也可以通过 CLI 进入。

钩子

以下生命周期钩子由 compiler 公开,可以这样访问

compiler.hooks.someHook.tap('MyPlugin', (params) => {
  /* ... */
});

根据钩子类型,tapAsynctapPromise 也可能可用。

有关钩子类型的描述,请参阅 Tapable 文档

环境

SyncHook

在准备编译器环境时调用,紧接在配置文​​件中初始化插件之后。

afterEnvironment

SyncHook

environment 钩子之后立即调用,此时编译器环境设置已完成。

entryOption

SyncBailHook

在处理来自 webpack 选项的 entry 配置 之后调用。

compiler.hooks.entryOption.tap('MyPlugin', (context, entry) => {
  /* ... */
});

afterPlugins

SyncHook

在设置初始内部插件集之后调用。

  • 回调参数:compiler

afterResolvers

SyncHook

在解析器设置完成后触发。

  • 回调参数:compiler

initialize

SyncHook

在编译器对象初始化时调用。

beforeRun

AsyncSeriesHook

在运行编译器之前添加一个钩子。

  • 回调参数:compiler

run

AsyncSeriesHook

在编译器开始读取 records 之前挂钩。

  • 回调参数:compiler

watchRun

AsyncSeriesHook

在监视模式下,新编译触发后但实际开始编译之前执行插件。

  • 回调参数:compiler

normalModuleFactory

SyncHook

在创建 NormalModuleFactory 后调用。

  • 回调参数:normalModuleFactory

contextModuleFactory

SyncHook

在创建 ContextModuleFactory 后运行插件。

  • 回调参数:contextModuleFactory

beforeCompile

AsyncSeriesHook

在创建编译参数后执行插件。

  • 回调参数:compilationParams

compilationParams 变量初始化如下

compilationParams = {
  normalModuleFactory,
  contextModuleFactory,
};

此钩子可用于添加/修改编译参数

compiler.hooks.beforeCompile.tapAsync('MyPlugin', (params, callback) => {
  params['MyPlugin - data'] = 'important stuff my plugin will use later';
  callback();
});

compile

SyncHook

紧接在 beforeCompile 之后调用,在创建新的编译之前。此钩子不会复制到子编译器。

  • 回调参数:compilationParams

thisCompilation

SyncHook

在初始化编译时执行,在发出 compilation 事件之前。此钩子不会复制到子编译器。

  • 回调参数:compilation, compilationParams

compilation

SyncHook

在创建编译后运行插件。

  • 回调参数:compilation, compilationParams

make

AsyncParallelHook

在完成编译之前执行。此钩子不会复制到子编译器。

  • 回调参数:compilation

afterCompile

AsyncSeriesHook

在完成并密封编译后调用。

  • 回调参数:compilation

shouldEmit

SyncBailHook

在发出资产之前调用。应返回一个布尔值,指示是否发出。

  • 回调参数:compilation
compiler.hooks.shouldEmit.tap('MyPlugin', (compilation) => {
  // return true to emit the output, otherwise false
  return true;
});

emit

AsyncSeriesHook

在将资产发出到输出目录之前执行。此钩子**不会**复制到子编译器。

  • 回调参数:compilation

afterEmit

AsyncSeriesHook

在将资产发出到输出目录之后调用。此钩子**不会**复制到子编译器。

  • 回调参数:compilation

assetEmitted

AsyncSeriesHook

当资产发出时执行。提供对已发出资产信息的访问权限,例如其输出路径和字节内容。

  • 回调参数:fileinfo

例如,您可以通过info.content访问资产的内容缓冲区。

compiler.hooks.assetEmitted.tap(
  'MyPlugin',
  (file, { content, source, outputPath, compilation, targetPath }) => {
    console.log(content); // <Buffer 66 6f 6f 62 61 72>
  }
);

done

AsyncSeriesHook

当编译完成时执行。此钩子**不会**复制到子编译器。

  • 回调参数:stats

additionalPass

AsyncSeriesHook

此钩子允许您对构建进行一次额外的传递。

failed

SyncHook

如果编译失败,则调用。

  • 回调参数:error

invalid

SyncHook

当监视编译失效时执行。此钩子**不会**复制到子编译器。

  • 回调参数:fileNamechangeTime

watchClose

SyncHook

当监视编译停止时调用。

shutdown

AsyncSeriesHook

当编译器关闭时调用。

infrastructureLog

SyncBailHook

允许在配置中通过infrastructureLogging选项启用时使用基础设施日志记录。

  • 回调参数:nametypeargs

log

SyncBailHook

允许在启用时登录到 stats,请参阅 stats.loggingstats.loggingDebugstats.loggingTrace 选项

  • 回调参数:originlogEntry

8 位贡献者

rishantagarwalbyzykmadhavarshneymisterdevEugeneHlushkosuperburritochenxsansnitin315