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.
Parameters: module
rebuildModule  SyncHook
Fired before rebuilding a module.
Parameters: module
failedModule  SyncHook
Run when a module build has failed.
Parameters: module error
succeedModule  SyncHook
Executed when a module has been built successfully.
Parameters: module
finishModules  SyncHook
All modules have been built.
Parameters: modules
finishRebuildingModule  SyncHook
A module has been rebuilt.
Parameters: module
seal  SyncHook
Fired when the compilation stops accepting new modules.
unseal  SyncHook
Fired when a compilation begins accepting new modules.
optimizeDependenciesBasic  SyncBailHook
...
Parameters: modules
optimizeDependencies  SyncBailHook
Fired at the beginning of dependency optimization.
Parameters: modules
optimizeDependenciesAdvanced  SyncBailHook
...
Parameters: modules
afterOptimizeDependencies  SyncHook
...
Parameters: modules
optimize  SyncHook
Triggered at the beginning of the optimization phase.
optimizeModulesBasic  SyncBailHook
...
Parameters: modules
optimizeModules  SyncBailHook
...
Parameters: modules
optimizeModulesAdvanced  SyncBailHook
...
Parameters: modules
afterOptimizeModules  SyncHook
...
Parameters: modules
optimizeChunksBasic  SyncBailHook
...
Parameters: chunks
optimizeChunks  SyncBailHook
Optimize the chunks.
Parameters: chunks
optimizeChunksAdvanced  SyncBailHook
...
Parameters: chunks
afterOptimizeChunks  SyncHook
Fired after chunk optimization has completed.
Parameters: chunks
optimizeTree  AsyncSeriesHook
Optimize the dependency tree asynchronously.
Parameters: chunks modules
afterOptimizeTree  SyncHook
...
Parameters: chunks modules
optimizeChunkModulesBasic  SyncBailHook
...
Parameters: chunks modules
optimizeChunkModules  SyncBailHook
...
Parameters: chunks modules
optimizeChunkModulesAdvanced  SyncBailHook
...
Parameters: chunks modules
afterOptimizeChunkModules  SyncHook
...
Parameters: chunks modules
shouldRecord  SyncBailHook
...
reviveModules  SyncHook
Restore module information from records.
Parameters: modules records
optimizeModuleOrder  SyncHook
Sort the modules in from most to least important.
Parameters: modules
advancedOptimizeModuleOrder  SyncHook
...
Parameters: modules
beforeModuleIds  SyncHook
...
Parameters: modules
moduleIds  SyncHook
...
Parameters: modules
optimizeModuleIds  SyncHook
...
Parameters: chunks
afterOptimizeModuleIds  SyncHook
...
Parameters: chunks
reviveChunks  SyncHook
Restore chunk information from records.
Parameters: modules records
optimizeChunkOrder  SyncHook
Sort the chunks in from most to least important.
Parameters: chunks
beforeOptimizeChunkIds  SyncHook
Fired before chunk id optimization.
Parameters: chunks
optimizeChunkIds  SyncHook
Optimize the id of each chunk.
Parameters: chunks
afterOptimizeChunkIds  SyncHook
Triggered after chunk id optimization has finished.
Parameters: chunks
recordModules  SyncHook
Store module info to the records.
Parameters: modules records
recordChunks  SyncHook
Store chunk info to the records.
Parameters: chunks records
beforeHash  SyncHook
Before the compilation is hashed.
afterHash  SyncHook
After the compilation is hashed.
recordHash  SyncHook
...
Parameters: records
record  SyncHook
Store information about the compilation to the records.
Parameters: compilation records
beforeModuleAssets  SyncHook
...
shouldGenerateChunkAssets  SyncBailHook
...
beforeChunkAssets  SyncHook
Before creating the chunk assets.
additionalChunkAssets  SyncHook
Create additional assets for the chunks.
Parameters: chunks
records  SyncHook
...
Parameters: compilation records
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.
Parameters: 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.
Parameters: 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.modules.map(module => module.request)
    });
  });
});
 optimizeAssets  AsyncSeriesHook
Optimize all assets stored in compilation.assets.
Parameters: assets
afterOptimizeAssets  SyncHook
The assets has been optimized.
Parameters: assets
needAdditionalSeal  SyncBailHook
...
afterSeal  AsyncSeriesHook
...
chunkHash  SyncHook
...
Parameters: chunk chunkHash
moduleAsset  SyncHook
An asset from a module was added to the compilation.
Parameters: module filename
chunkAsset  SyncHook
An asset from a chunk was added to the compilation.
Parameters: chunk filename
assetPath  SyncWaterfallHook
...
Parameters: filename data
needAdditionalPass  SyncBailHook
...
childCompiler  SyncHook
...
Parameters: childCompiler compilerName compilerIndex
normalModuleLoader  SyncHook
The normal module loader is the function that actually loads all the modules in the module graph (one-by-one).
Parameters: loaderContext module
dependencyReference  SyncWaterfallHook
Compilation.hooks.dependencyReference(depRef, dependency, module) allows to change the references reported by dependencies.
Parameters: depRef dependency module
    © JS Foundation and other contributors
Licensed under the Creative Commons Attribution License 4.0.
    https://webpack.js.org/api/compilation-hooks