hard-source-webpack-plugin-fixed-hashbug
Version:
Hard cache the source of modules in webpack. Patched version fixing the hash bug
68 lines (61 loc) • 1.86 kB
JavaScript
const pluginCompat = require('./util/plugin-compat');
const mixinCssDependency = function(CssDependency) {
const Dependency = Object.getPrototypeOf(CssDependency.prototype).constructor;
CssDependency.prototype.updateHash = function(hash) {
Dependency.prototype.updateHash.call(this, hash);
hash.update(this.content);
};
};
class SupportMiniCssExtractPlugin {
apply(compiler) {
let CssDependency;
pluginCompat.tap(
compiler,
'make',
'SupportMiniCssExtractPlugin',
({ dependencyFactories }) => {
const Dependencies = dependencyFactories.keys();
for (const Dep of Dependencies) {
if (Dep.name === 'CssDependency') {
CssDependency = Dep;
mixinCssDependency(CssDependency);
break;
}
}
},
);
pluginCompat.tap(
compiler,
'_hardSourceFreezeDependency',
'HardMiniCssExtractPlugin freeze',
(frozen, dependency, extra) => {
if (dependency.constructor === CssDependency) {
return {
type: 'CssDependency',
line: {
identifier: dependency.identifier,
content: dependency.content,
media: dependency.media,
sourceMap: dependency.sourceMap,
},
context: dependency.context,
identifierIndex: dependency.identifierIndex,
};
}
return frozen;
},
);
pluginCompat.tap(
compiler,
'_hardSourceThawDependency',
'HardMiniCssExtractPlugin',
(dependency, { type, line, context, identifierIndex }, extra) => {
if (type === 'CssDependency') {
return new CssDependency(line, context, identifierIndex);
}
return dependency;
},
);
}
}
module.exports = SupportMiniCssExtractPlugin;