piral-cli-webpack5
Version:
Provides debug and build capabilities for pilets and Piral instances using Webpack v5.
37 lines (31 loc) • 1.25 kB
text/typescript
import { posix, resolve } from 'path';
import { Compilation, Compiler } from 'webpack';
import { RawSource } from 'webpack-sources';
export default class StylesPlugin {
constructor(private cssName: string, private entryName: string) {}
apply(compiler: Compiler) {
const { entry } = compiler.options;
const entries = entry[this.entryName].import.map((e: string) => e.split('\\').join(posix.sep));
const query = `cssName=${this.cssName}&entries=${entries.join(',')}!`;
const setPath = resolve(__dirname, '..', 'set-path');
const loaderBasePath = resolve(__dirname, `StylesLoader`);
const loaderPath = `${loaderBasePath}?${query}`;
entry[this.entryName].import = [setPath, loaderPath];
compiler.hooks.compilation.tap('StylesPlugin', (compilation: Compilation) => {
if (!compilation.compiler.parentCompilation) {
compilation.hooks.processAssets.tap(
{
name: 'StylesPlugin',
stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONS,
},
(assets) => {
if (!assets[this.cssName]) {
const source = new RawSource('');
compilation.emitAsset(this.cssName, source);
}
},
);
}
});
}
}