The Compilation
module is used by the Compiler
to create new compilations
(or builds). A compilation
instance has access to all modules and their
dependencies (most of which are circular references). It is the literal
compilation of all the modules in the dependency graph of an application.
During the compilation phase, modules are loaded, sealed, optimized, chunked,
hashed and restored.
The Compilation
class also extends Tapable
and provides the following
lifecycle hooks. They can be tapped the same way as compiler hooks:
compilation.hooks.someHook.tap(/* ... */);
As with the compiler
, tapAsync
and tapPromise
may also be available
depending on the type of hook.
buildModule
SyncHook
Triggered before a module build has started, can be used to modify the module.
module
compilation.hooks.buildModule.tap('SourceMapDevToolModuleOptionsPlugin',
module => {
module.useSourceMap = true;
}
);
rebuildModule
SyncHook
Fired before rebuilding a module.
module
failedModule
SyncHook
Run when a module build has failed.
module
error
succeedModule
SyncHook
Executed when a module has been built successfully.
module
finishModules
AsyncSeriesHook
Called when all modules have been built without errors.
modules
finishRebuildingModule
SyncHook
Executed when a module has been rebuilt, in case of both success or with errors.
module
seal
SyncHook
Fired when the compilation stops accepting new modules.
unseal
SyncHook
Fired when a compilation begins accepting new modules.
optimizeDependenciesBasic
SyncBailHook
This hook will be removed in v5.0.0
Parameters: modules
optimizeDependencies
SyncBailHook
Fired at the beginning of dependency optimization.
modules
optimizeDependenciesAdvanced
SyncBailHook
This hook will be removed in v5.0.0
modules
afterOptimizeDependencies
SyncHook
Fired after the dependency optimization.
modules
optimize
SyncHook
Triggered at the beginning of the optimization phase.
optimizeModulesBasic
SyncBailHook
This hook will be removed in v5.0.0
modules
optimizeModules
SyncBailHook
Called at the beginning of the modules optimization phase. A plugin can tap into this hook to perform modules optimizations.
modules
optimizeModulesAdvanced
SyncBailHook
This hook will be removed in v5.0.0
modules
afterOptimizeModules
SyncHook
Called after modules optimization has completed.
modules
optimizeChunksBasic
SyncBailHook
This hook will be removed in v5.0.0
chunks
optimizeChunks
SyncBailHook
Called at the beginning of the chunks optimizion phase. A plugin can tap into this hook to perform chunks optimizations.
chunks
optimizeChunksAdvanced
SyncBailHook
This hook will be removed in v5.0.0
chunks
afterOptimizeChunks
SyncHook
Fired after chunk optimization has completed.
chunks
optimizeTree
AsyncSeriesHook
Called before optimizing the dependency tree. A plugin can tap into this hook to perform a dependency tree optimization.
chunks
modules
afterOptimizeTree
SyncHook
Called after the dependency tree optimization has completed with success.
chunks
modules
optimizeChunkModulesBasic
SyncBailHook
This hook will be removed in v5.0.0
chunks
modules
optimizeChunkModules
SyncBailHook
Called after the tree optimization, at the beginning of the chunk modules optimization. A plugin can tap into this hook to perform optimizations of chunk modules.
chunks
modules
optimizeChunkModulesAdvanced
SyncBailHook
This hook will be removed in v5.0.0
chunks
modules
afterOptimizeChunkModules
SyncHook
Called after the chunkmodules optimization has successfully completed.
chunks
modules
shouldRecord
SyncBailHook
Called to determine whether or not to store records. Returning anything !== false
will prevent every other "record" hook from being executed (record
, recordModules
, recordChunks
and recordHash
).
reviveModules
SyncHook
Restore module information from records.
modules
records
optimizeModuleOrder
SyncHook
This hook will be removed in v5.0.0
Sort the modules from most to least important.
modules
advancedOptimizeModuleOrder
SyncHook
This hook will be removed in v5.0.0
modules
beforeModuleIds
SyncHook
Executed before assigning an id
to each module.
modules
moduleIds
SyncHook
Called to assign an id
to each module.
modules
optimizeModuleIds
SyncHook
Called at the beginning of the modules id
optimization.
modules
afterOptimizeModuleIds
SyncHook
Called when the modules id
optimization phase has completed.
modules
reviveChunks
SyncHook
Restore chunk information from records.
chunks
records
optimizeChunkOrder
SyncHook
This hook will be removed in v5.0.0
Sort the chunks in from most to least important.
chunks
beforeChunkIds
SyncHook
Executed before assigning an id
to each chunk.
chunks
chunkIds
SyncHook
This hook will be available in v5.0.0
Called to assign an id
to each chunk.
modules
beforeOptimizeChunkIds
SyncHook
This hook will be available in v5.0.0
Fired before chunks id
optimization.
chunks
optimizeChunkIds
SyncHook
Called at the beginning of the chunks id
optimization phase.
chunks
afterOptimizeChunkIds
SyncHook
Triggered after chunk id
optimization has finished.
chunks
recordModules
SyncHook
Store module info to the records. This is only triggered if shouldRecord
returns a truthy value.
modules
records
recordChunks
SyncHook
Store chunk info to the records. This is only triggered if shouldRecord
returns a truthy value.
chunks
records
optimizeCodeGeneration
This hook will be available in v5.0.0
A plugin can tap into this hook to optimize the generated code.
modules
beforeModuleHash
This hook will be available in v5.0.0
Called before hashing modules.
afterModuleHash
This hook will be available in v5.0.0
Called after hashing modules.
beforeRuntimeRequirements
This hook will be available in v5.0.0
Called before processing the modules required at runtime.
entrypoints
afterRuntimeRequirements
This hook will be available in v5.0.0
Called after processing the runtime requirements.
beforeHash
SyncHook
Called before the compilation is hashed.
afterHash
SyncHook
Called after the compilation is hashed.
recordHash
SyncHook
Store information about record hash to the records
. This is only triggered if shouldRecord
returns a truthy value.
records
record
SyncHook
Store information about the compilation
to the records
. This is only triggered if shouldRecord
returns a truthy value.
compilation
records
beforeModuleAssets
SyncHook
Executed before module assets creation.
additionalChunkAssets
SyncHook
Create additional assets for the chunks.
chunks
shouldGenerateChunkAssets
SyncBailHook
Called to determine wheter or not generate chunks assets. Returning anything !== false
will allow chunk assets generation.
beforeChunkAssets
SyncHook
Executed before creating the chunks assets.
additionalAssets
AsyncSeriesHook
Create additional assets for the compilation. This hook can be used to download an image, for example:
compilation.hooks.additionalAssets.tapAsync('MyPlugin', callback => {
download('https://img.shields.io/npm/v/webpack.svg', function(resp) {
if(resp.status === 200) {
compilation.assets['webpack-version.svg'] = toAsset(resp);
callback();
} else {
callback(new Error('[webpack-example-plugin] Unable to download the image'));
}
});
});
optimizeChunkAssets
AsyncSeriesHook
Optimize any chunk assets. The assets are stored in compilation.assets
. A
Chunk
has a property files
which points to all files created by a chunk.
Any additional chunk assets are stored in compilation.additionalChunkAssets
.
chunks
Here's an example that simply adds a banner to each chunk.
compilation.hooks
.optimizeChunkAssets
.tapAsync('MyPlugin', (chunks, callback) => {
chunks.forEach(chunk => {
chunk.files.forEach(file => {
compilation.assets[file] = new ConcatSource(
'\/**Sweet Banner**\/',
'\n',
compilation.assets[file]
);
});
});
callback();
});
afterOptimizeChunkAssets
SyncHook
The chunk assets have been optimized.
chunks
Here's an example plugin from @boopathi that outputs exactly what went into each chunk.
compilation.hooks.afterOptimizeChunkAssets.tap('MyPlugin', chunks => {
chunks.forEach(chunk => {
console.log({
id: chunk.id,
name: chunk.name,
includes: chunk.getModules().map(module => module.request)
});
});
});
optimizeAssets
AsyncSeriesHook
Optimize all assets stored in compilation.assets
.
assets
afterOptimizeAssets
SyncHook
The assets have been optimized.
assets
needAdditionalSeal
SyncBailHook
Called to determine if the compilation needs to be unsealed to include other files.
afterSeal
AsyncSeriesHook
Executed right after needAdditionalSeal
.
chunkHash
SyncHook
Triggered to emit the hash for each chunk.
chunk
chunkHash
moduleAsset
SyncHook
Called when an asset from a module was added to the compilation.
module
filename
chunkAsset
SyncHook
Triggered when an asset from a chunk was added to the compilation.
chunk
filename
assetPath
SyncWaterfallHook
Called to determine the path of an asset.
path
options
needAdditionalPass
SyncBailHook
Called to determine if a asset need to be processed further after being emitted.
childCompiler
SyncHook
Executed after setting up a child compiler.
childCompiler
compilerName
compilerIndex
normalModuleLoader
SyncHook
This hook will be moved in v5.0.0 to
NormalModule.getCompilationHooks(compilation).loader
The normal module loader is the function that actually loads all the modules
in the module graph (one-by-one).
loaderContext
module
dependencyReference
SyncWaterfallHook
This hooks allows changing the references reported by dependencies.
depRef
dependency
module
The
module
parameter will be removed in v5.0.0