@ -11,7 +11,6 @@ import webpack from 'webpack';
import { fileURLToPath } from 'node:url' ;
import { fileURLToPath } from 'node:url' ;
import { readFileSync } from 'node:fs' ;
import { readFileSync } from 'node:fs' ;
import { env } from 'node:process' ;
import { env } from 'node:process' ;
import { LightningCssMinifyPlugin } from 'lightningcss-loader' ;
const { EsbuildPlugin } = EsBuildLoader ;
const { EsbuildPlugin } = EsBuildLoader ;
const { SourceMapDevToolPlugin , DefinePlugin } = webpack ;
const { SourceMapDevToolPlugin , DefinePlugin } = webpack ;
@ -52,6 +51,12 @@ const filterCssImport = (url, ...args) => {
return true ;
return true ;
} ;
} ;
// in case lightningcss fails to load, fall back to esbuild for css minify
let LightningCssMinifyPlugin ;
try {
( { LightningCssMinifyPlugin } = await import ( 'lightningcss-loader' ) ) ;
} catch { }
/** @type {import("webpack").Configuration} */
/** @type {import("webpack").Configuration} */
export default {
export default {
mode : isProduction ? 'production' : 'development' ,
mode : isProduction ? 'production' : 'development' ,
@ -97,10 +102,10 @@ export default {
new EsbuildPlugin ( {
new EsbuildPlugin ( {
target : 'es2015' ,
target : 'es2015' ,
minify : true ,
minify : true ,
css : false ,
css : ! LightningCssMinifyPlugin ,
legalComments : 'none' ,
legalComments : 'none' ,
} ) ,
} ) ,
new LightningCssMinifyPlugin ( ) ,
LightningCssMinifyPlugin && new LightningCssMinifyPlugin ( ) ,
] ,
] ,
splitChunks : {
splitChunks : {
chunks : 'async' ,
chunks : 'async' ,