hard-source-webpack-plugin
Version:
Hard cache the source of modules in webpack.
54 lines (46 loc) • 1.38 kB
JavaScript
const pluginCompat = require('./util/plugin-compat');
const matchTest = (test, source) => {
if (Array.isArray(test)) {
return test.some(subtest => matchTest(subtest, source));
} else if (test instanceof RegExp) {
return test.test(source);
} else if (typeof test === 'string') {
return source.startsWith(test);
} else if (typeof test === 'function') {
return test(source);
}
return false;
};
const matchOne = ({ test, include, exclude }, source) => {
return (
(test ? matchTest(test, source) : true) &&
(include ? matchTest(include, source) : true) &&
(exclude ? !matchTest(exclude, source) : true)
);
};
const matchAny = (test, source) => {
if (Array.isArray(test)) {
return test.some(subtest => matchOne(subtest, source));
}
return matchOne(test, source);
};
class ExcludeModulePlugin {
constructor(match) {
this.match = match;
}
apply(compiler) {
const compilerHooks = pluginCompat.hooks(compiler);
compilerHooks.afterPlugins.tap('HardSource - ExcludeModulePlugin', () => {
compilerHooks._hardSourceAfterFreezeModule.tap(
'HardSource - ExcludeModulePlugin',
(frozen, module, extra) => {
if (matchAny(this.match, module.identifier())) {
return null;
}
return frozen;
},
);
});
}
}
module.exports = ExcludeModulePlugin;