UNPKG

@roots/bud-minify

Version:

CSS and JS minification for bud.js

57 lines (48 loc) 1.51 kB
import type {Bud} from '@roots/bud-framework' import {Extension} from '@roots/bud-framework/extension' import {label} from '@roots/bud-framework/extension/decorators/label' import {production} from '@roots/bud-framework/extension/decorators/production' import {bind} from '@roots/bud-support/decorators/bind' import { type BudMinimizeCSSOptions, BudMinimizeCSSPublicApi, type BudMinimizeCSSPublicInterface, } from './extension.config.js' /** * Css minimizer */ @label(`@roots/bud-minify/minify-css`) @production class BudMinimizeCSS extends BudMinimizeCSSPublicApi { /** * {@link Extension.buildBefore} */ @bind public override async buildBefore({extensions, hooks, module}: Bud) { const { default: Minimizer, esbuildMinify, lightningCssMinify, swcMinify, } = await module.import( `css-minimizer-webpack-plugin`, import.meta.url, {raw: true}, ) if (!this.minify && extensions.has(`@roots/bud-swc`)) this.setMinify(() => swcMinify) if (!this.minify && extensions.has(`@roots/bud-esbuild`)) this.setMinify(() => esbuildMinify) if (!this.minify) this.setMinify(() => lightningCssMinify) hooks.on(`build.optimization.minimizer`, (minimizers = []) => [ ...minimizers.filter(minimizer => !(minimizer instanceof Minimizer)), new Minimizer({...this.options}), ]) } } export default BudMinimizeCSS export type { BudMinimizeCSS, BudMinimizeCSSOptions, BudMinimizeCSSPublicInterface, }