@roots/bud-extensions
Version:
bud.js core module
28 lines (27 loc) • 1.15 kB
JavaScript
import { Extension } from '@roots/bud-framework/extension';
import isString from '@roots/bud-support/isString';
/**
* Remove empty modules from the compilation
*/
export default class FixStyleOnlyEntrypoints extends Extension {
/**
* {@link WebpackPluginInstance.apply}
*/
apply({ hooks }) {
hooks.thisCompilation.tap(this.constructor.name, compilation => compilation.hooks.chunkAsset.tap(this.constructor.name, (chunk, file) => {
if (!/\.(js|mjs)$/.test(file))
return;
const modules = new Set();
const add = (id) => id && isString(id) && modules.add(id);
const chunkModules = compilation.chunkGraph.getChunkEntryModulesIterable(chunk);
for (const module of chunkModules) {
add(module.identifier());
for (const resource of module.dependencies)
add(resource.getResourceIdentifier());
}
modules.size > 1 &&
Array.from(modules).every(ident => /\.(css|scss|sass)((-|\?).*)?$/.test(ident)) &&
compilation.deleteAsset(file);
}));
}
}