Compiler
模块是创建编译实例的主要引擎,它包含通过 CLI 或 Node API 传递的所有选项。它扩展了 Tapable
类以注册和调用插件。大多数面向用户的插件首先在 Compiler
上注册。
在为 webpack 开发插件时,您可能想知道每个钩子是在哪里调用的。要了解这一点,请在 webpack 源代码中搜索 hooks.<hook name>.call
。
Compiler
支持 观察,它会监控文件系统并在文件更改时重新编译。在观察模式下,编译器将发出额外的事件,例如 watchRun
、watchClose
和 invalid
。这通常用于 开发,通常在像 webpack-dev-server
这样的工具的内部使用,这样开发人员就不需要每次手动重新编译。观察模式也可以通过 CLI 进入。
以下生命周期钩子由 compiler
公开,可以这样访问
compiler.hooks.someHook.tap('MyPlugin', (params) => {
/* ... */
});
根据钩子类型,tapAsync
和 tapPromise
也可能可用。
有关钩子类型的描述,请参阅 Tapable 文档。
SyncHook
在准备编译器环境时调用,紧接在配置文件中初始化插件之后。
SyncHook
在 environment
钩子之后立即调用,此时编译器环境设置已完成。
SyncBailHook
在处理来自 webpack 选项的 entry
配置 之后调用。
compiler.hooks.entryOption.tap('MyPlugin', (context, entry) => {
/* ... */
});
SyncHook
在设置初始内部插件集之后调用。
compiler
SyncHook
在解析器设置完成后触发。
compiler
SyncHook
在编译器对象初始化时调用。
AsyncSeriesHook
在运行编译器之前添加一个钩子。
compiler
AsyncSeriesHook
在编译器开始读取 records
之前挂钩。
compiler
AsyncSeriesHook
在监视模式下,新编译触发后但实际开始编译之前执行插件。
compiler
SyncHook
在创建 NormalModuleFactory 后调用。
normalModuleFactory
SyncHook
在创建 ContextModuleFactory 后运行插件。
contextModuleFactory
AsyncSeriesHook
在创建编译参数后执行插件。
compilationParams
compilationParams
变量初始化如下
compilationParams = {
normalModuleFactory,
contextModuleFactory,
};
此钩子可用于添加/修改编译参数
compiler.hooks.beforeCompile.tapAsync('MyPlugin', (params, callback) => {
params['MyPlugin - data'] = 'important stuff my plugin will use later';
callback();
});
SyncHook
紧接在 beforeCompile
之后调用,在创建新的编译之前。此钩子不会复制到子编译器。
compilationParams
SyncHook
在初始化编译时执行,在发出 compilation
事件之前。此钩子不会复制到子编译器。
compilation
, compilationParams
SyncHook
在创建编译后运行插件。
compilation
, compilationParams
AsyncParallelHook
在完成编译之前执行。此钩子不会复制到子编译器。
compilation
AsyncSeriesHook
在完成并密封编译后调用。
compilation
SyncBailHook
在发出资产之前调用。应返回一个布尔值,指示是否发出。
compilation
compiler.hooks.shouldEmit.tap('MyPlugin', (compilation) => {
// return true to emit the output, otherwise false
return true;
});
AsyncSeriesHook
在将资产发出到输出目录之前执行。此钩子**不会**复制到子编译器。
compilation
AsyncSeriesHook
在将资产发出到输出目录之后调用。此钩子**不会**复制到子编译器。
compilation
AsyncSeriesHook
当资产发出时执行。提供对已发出资产信息的访问权限,例如其输出路径和字节内容。
file
、info
例如,您可以通过info.content
访问资产的内容缓冲区。
compiler.hooks.assetEmitted.tap(
'MyPlugin',
(file, { content, source, outputPath, compilation, targetPath }) => {
console.log(content); // <Buffer 66 6f 6f 62 61 72>
}
);
AsyncSeriesHook
当编译完成时执行。此钩子**不会**复制到子编译器。
stats
AsyncSeriesHook
此钩子允许您对构建进行一次额外的传递。
SyncHook
如果编译失败,则调用。
error
SyncHook
当监视编译失效时执行。此钩子**不会**复制到子编译器。
fileName
、changeTime
SyncHook
当监视编译停止时调用。
AsyncSeriesHook
当编译器关闭时调用。
SyncBailHook
允许在配置中通过infrastructureLogging
选项启用时使用基础设施日志记录。
name
、type
、args
SyncBailHook
允许在启用时登录到 stats,请参阅 stats.logging
、stats.loggingDebug
和 stats.loggingTrace
选项。
origin
、logEntry