TheCompiler module is the main engine that creates a compilation instancewith all the options passed through theCLI orNode API. It extends theTapable class in order to register and call plugins. Most user-facing pluginsare first registered on theCompiler.
When developing a plugin for webpack, you might want to know where each hook is called. To learn this, search forhooks.<hook name>.call across the webpack source.
Since webpack 5,hooks are no longer extendable. Use aWeakMap to add custom hooks.
TheCompiler supportswatching which monitors the filesystem and recompiles as files change. When in watch mode, the compiler willemit the additional events such aswatchRun,watchClose, andinvalid.This is typically used indevelopment, usually underthe hood of tools likewebpack-dev-server, so that the developer doesn'tneed to re-compile manually every time. Watch mode can also be entered via theCLI.
The following lifecycle hooks are exposed by thecompiler and can be accessedas such:
compiler.hooks.someHook.tap('MyPlugin',(params)=>{/* ... */});Depending on the hook type,tapAsync andtapPromise may also be available.
For the description of hook types, seethe Tapable docs.
SyncHook
Called while preparing the compiler environment, right after initializing the plugins in the configuration file.
SyncHook
Called right after theenvironment hook, when the compiler environment setup is complete.
SyncBailHook
Called after theentry configuration from webpack options has been processed.
compiler.hooks.entryOption.tap('MyPlugin',(context, entry)=>{/* ... */});SyncHook
Called after setting up initial set of internal plugins.
compilerSyncHook
Triggered after resolver setup is complete.
compilerSyncHook
Called when a compiler object is initialized.
AsyncSeriesHook
Adds a hook right before running the compiler.
compilerAsyncSeriesHook
Hook into the compiler before it begins readingrecords.
compilerAsyncSeriesHook
Executes a plugin during watch mode after a new compilation is triggered but before the compilation is actually started.
compilerSyncHook
Called after aNormalModuleFactory is created.
normalModuleFactorySyncHook
Runs a plugin after aContextModuleFactory is created.
contextModuleFactoryAsyncSeriesHook
Executes a plugin after compilation parameters are created.
compilationParamsThecompilationParams variable is initialized as follows:
compilationParams={ normalModuleFactory, contextModuleFactory,};This hook can be used to add/modify the compilation parameters:
compiler.hooks.beforeCompile.tapAsync('MyPlugin',(params, callback)=>{ params['MyPlugin - data']='important stuff my plugin will use later';callback();});SyncHook
Called right afterbeforeCompile, before a new compilation is created. This hook isnot copied to child compilers.
compilationParamsSyncHook
Executed while initializing the compilation, right before emitting thecompilation event. This hook isnot copied to child compilers.
compilation,compilationParamsSyncHook
Runs a plugin after a compilation has been created.
compilation,compilationParamsAsyncParallelHook
Executed before finishing the compilation. This hook isnot copied to child compilers.
compilationAsyncSeriesHook
Called after finishing and sealing the compilation.
compilationSyncBailHook
Called before emitting assets. Should return a boolean telling whether to emit.
compilationcompiler.hooks.shouldEmit.tap('MyPlugin',(compilation)=>{// return true to emit the output, otherwise falsereturntrue;});AsyncSeriesHook
Executed right before emitting assets to output dir. This hook isnot copied to child compilers.
compilationAsyncSeriesHook
Called after emitting assets to output directory. This hook isnot copied to child compilers.
compilationAsyncSeriesHook
Executed when an asset has been emitted. Provides access to information about the emitted asset, such as its output path and byte content.
file,infoFor example, you may access the asset's content buffer viainfo.content:
compiler.hooks.assetEmitted.tap('MyPlugin',(file,{ content, source, outputPath, compilation, targetPath})=>{ console.log(content);// <Buffer 66 6f 6f 62 61 72>});AsyncSeriesHook
Executed when the compilation has completed. This hook isnot copied to child compilers.
statsAsyncSeriesHook
This hook allows you to do a one more additional pass of the build.
SyncHook
Called if the compilation fails.
errorSyncHook
Executed when a watching compilation has been invalidated. This hook isnot copied to child compilers.
fileName,changeTimeSyncHook
Called when a watching compilation has stopped.
AsyncSeriesHook
Called when the compiler is closing.
SyncBailHook
Allows to use infrastructure logging when enabled in the configuration viainfrastructureLogging option.
name,type,argsSyncBailHook
Allows to log intostats when enabled, seestats.logging,stats.loggingDebug andstats.loggingTrace options.
origin,logEntry