in lib/plugin.js [60:161]
apply(compiler) {
this.rules = getMatchedRule(compiler);
const path = this.rules.outputPath ? this.rules.outputPath : this.rules.publicPath;
this.filenamePrefix = path
? path.replace(/^\//, '')
: '';
if (compiler.hooks) {
compiler.hooks
.thisCompilation
.tap(NAMESPACE, (compilation) => {
try {
// eslint-disable-next-line global-require
const NormalModule = require('webpack/lib/NormalModule');
NormalModule.getCompilationHooks(compilation).loader
.tap(NAMESPACE, loaderContext => loaderContext[NAMESPACE] = this);
} catch (e) {
compilation.hooks
.normalModuleLoader
.tap(NAMESPACE, loaderContext => loaderContext[NAMESPACE] = this);
}
compilation.hooks
.afterOptimizeChunks
.tap(NAMESPACE, () => this.afterOptimizeChunks(compilation));
if (compilation.hooks.optimizeExtractedChunks) {
compilation.hooks
.optimizeExtractedChunks
.tap(NAMESPACE, chunks => this.optimizeExtractedChunks(chunks));
}
compilation.hooks
.additionalAssets
.tapPromise(NAMESPACE, () => {
return this.additionalAssets(compilation);
});
});
compiler.hooks
.compilation
.tap(NAMESPACE, (compilation) => {
if (compilation.hooks.htmlWebpackPluginBeforeHtmlGeneration) {
compilation.hooks
.htmlWebpackPluginBeforeHtmlGeneration
.tapAsync(NAMESPACE, (htmlPluginData, callback) => {
htmlPluginData.assets.sprites = this.beforeHtmlGeneration(compilation);
callback(null, htmlPluginData);
});
}
if (compilation.hooks.htmlWebpackPluginBeforeHtmlProcessing) {
compilation.hooks
.htmlWebpackPluginBeforeHtmlProcessing
.tapAsync(NAMESPACE, (htmlPluginData, callback) => {
htmlPluginData.html = this.beforeHtmlProcessing(htmlPluginData);
callback(null, htmlPluginData);
});
}
});
} else {
// Handle only main compilation
compiler.plugin('this-compilation', (compilation) => {
// Share svgCompiler with loader
compilation.plugin('normal-module-loader', (loaderContext) => {
loaderContext[NAMESPACE] = this;
});
// Replace placeholders with real URL to symbol (in modules processed by svg-sprite-loader)
compilation.plugin('after-optimize-chunks', () => this.afterOptimizeChunks(compilation));
// Hook into extract-text-webpack-plugin to replace placeholders with real URL to symbol
compilation.plugin('optimize-extracted-chunks', chunks => this.optimizeExtractedChunks(chunks));
// Hook into html-webpack-plugin to add `sprites` variable into template context
compilation.plugin('html-webpack-plugin-before-html-generation', (htmlPluginData, done) => {
htmlPluginData.assets.sprites = this.beforeHtmlGeneration(compilation);
done(null, htmlPluginData);
});
// Hook into html-webpack-plugin to replace placeholders with real URL to symbol
compilation.plugin('html-webpack-plugin-before-html-processing', (htmlPluginData, done) => {
htmlPluginData.html = this.beforeHtmlProcessing(htmlPluginData);
done(null, htmlPluginData);
});
// Create sprite chunk
compilation.plugin('additional-assets', (done) => {
return this.additionalAssets(compilation)
.then(() => {
done();
return true;
})
.catch(e => done(e));
});
});
}
}