Skip to content

Commit 3eeffce

Browse files
committed
Handle html resource provided by html-webpack-plugin
1 parent 7a886f3 commit 3eeffce

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

lib/optimizer.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,13 @@ const optimize = (compiler, [file, originalSource], compilation, opts, classGene
8282
compilation.updateAsset(file, source);
8383
};
8484

85-
const optimizer = (compiler, compilation, opts) => (assets) => {
85+
const optimizer = (opts) => {
8686
if (!opts.classNameRegExp) throw new Error("'classNameRegExp' option is required. e.g. '[c]-[a-z][a-zA-Z0-9_]*'");
8787
const classGenerator = new ClassGenerator();
88-
Object.entries(assets).forEach((asset) => optimize(compiler, asset, compilation, opts, classGenerator));
89-
validate(opts, classGenerator);
88+
return (compiler, compilation, assets) => {
89+
Object.entries(assets).forEach((asset) => optimize(compiler, asset, compilation, opts, classGenerator));
90+
validate(opts, classGenerator);
91+
};
9092
}
9193

9294
module.exports = optimizer;

lib/plugin.js

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
const optimizer = require('./optimizer');
2+
let HtmlWebpackPlugin = null;
3+
try {
4+
HtmlWebpackPlugin = require('html-webpack-plugin');
5+
} catch {
6+
// ignore
7+
}
28

3-
const runner = (compiler, compilation, opts) => {
4-
const optimize = optimizer(compiler, compilation, opts);
5-
return (chunks, callback) => {
6-
optimize(chunks);
9+
const runner = (opts) => {
10+
const optimize = optimizer(opts);
11+
return (compiler, compilation, chunks, callback) => {
12+
optimize(compiler, compilation, chunks);
713
callback();
814
};
915
}
@@ -17,7 +23,18 @@ class Plugin {
1723
compiler.hooks.compilation.tap(
1824
'MangleCssClassPluginHooks',
1925
(compilation) => {
20-
compilation.hooks.processAssets.tapAsync('MangleCssClassPluginOptimizeChunkAssetsHooks', runner(compiler, compilation, this.opts));
26+
if (!this.fn) {
27+
this.fn = runner(this.opts);
28+
}
29+
if (HtmlWebpackPlugin) {
30+
HtmlWebpackPlugin.getHooks(compilation).afterEmit.tapAsync(
31+
'MangleCssClassPluginOptimizeChunkAssetsHooks',
32+
(data, callback) => {
33+
this.fn(compiler, compilation, { [data.outputName]: compilation.assets[data.outputName] }, callback);
34+
},
35+
);
36+
}
37+
compilation.hooks.processAssets.tapAsync('MangleCssClassPluginOptimizeChunkAssetsHooks', (chunks, callback) => this.fn(compiler, compilation, chunks, callback));
2138
}
2239
);
2340
}

0 commit comments

Comments
 (0)