The Compiler module is the main engine that creates a compilation instance
with all the options passed through the CLI or Node API. It extends the
Tapable class in order to register and call plugins. Most user-facing plugins
are first registered on the Compiler.
When developing a plugin for webpack, you might want to know where each hook is called. To learn this, search for hooks.<hook name>.call across the webpack source.
The Compiler supports watching which monitors the file
system and recompiles as files change. When in watch mode, the compiler will
emit the additional events such as watchRun, watchClose, and invalid.
This is typically used in development, usually under
the hood of tools like webpack-dev-server, so that the developer doesn't
need to re-compile manually every time. Watch mode can also be entered via the
CLI.
The following lifecycle hooks are exposed by the compiler and can be accessed
as such:
compiler.hooks.someHook.tap('MyPlugin', (params) => {
/* ... */
});
Depending on the hook type, tapAsync and tapPromise may also be available.
For the description of hook types, see the Tapable docs.
SyncHook
Called while preparing the compiler environment, right after initializing the plugins in the configuration file.
SyncHook
Called right after the environment hook, when the compiler environment setup is complete.
SyncBailHook
Called after the entry 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 reading records.
compilerAsyncSeriesHook
Executes a plugin during watch mode after a new compilation is triggered but before the compilation is actually started.
compilerSyncHook
Called after a NormalModuleFactory is created.
normalModuleFactorySyncHook
Runs a plugin after a ContextModuleFactory is created.
contextModuleFactoryAsyncSeriesHook
Executes a plugin after compilation parameters are created.
compilationParamsThe compilationParams 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 after beforeCompile, before a new compilation is created. This hook is not copied to child compilers.
compilationParamsSyncHook
Executed while initializing the compilation, right before emitting the compilation event. This hook is not copied to child compilers.
compilation, compilationParamsSyncHook
Runs a plugin after a compilation has been created.
compilation, compilationParamsAsyncParallelHook
Executed before finishing the compilation. This hook is not 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 false
return true;
});
AsyncSeriesHook
Executed right before emitting assets to output dir. This hook is not copied to child compilers.
compilationAsyncSeriesHook
Called after emitting assets to output directory. This hook is not 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 via info.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 is not 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 is not 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 via infrastructureLogging option.
name, type, argsSyncBailHook
Allows to log into stats when enabled, see stats.logging, stats.loggingDebug and stats.loggingTrace options.
origin, logEntry