import { cssRegex , cssModuleRegex } from '../config/regex' ; import { RuleSetRule } from '@balm-core/index' ; function cssLoader ( ) { let styleLoader = { loader : require . resolve ( 'style-loader' ) , options : { esModule : BalmJS . config . scripts . useEsModule } } ; if ( BalmJS . config . env . inSSR ) { const loadersCount = BalmJS . config . scripts . loaders . length ; for ( let i = 0 ; i < loadersCount ; i ++ ) { if ( ( BalmJS . config . scripts . loaders [ i ] as { loader ? : string ; } ) . loader === 'vue-loader' ) { styleLoader = 'vue-style-loader' ; break ; } } } const sourceMap = BalmJS . config . env . isProd ? BalmJS . config . scripts . sourceMap : BalmJS . config . env . isDev ; return { test : cssRegex , exclude : cssModuleRegex , use : [ BalmJS . config . env . isProd && BalmJS . config . scripts . extractCss ? { loader : require ( 'mini-css-extract-plugin' ) . loader , options : { esModule : BalmJS . config . scripts . useEsModule } } : styleLoader , { loader : require . resolve ( 'css-loader' ) , options : { importLoaders : 1 , sourceMap , modules : { compileType : 'icss' } , esModule : BalmJS . config . scripts . useEsModule } } , { loader : require . resolve ( 'postcss-loader' ) , options : Object . assign ( { postcssOptions : { plugins : BalmJS . plugins . postcssPlugins ( true ) } , sourceMap } , BalmJS . config . scripts . postcssLoaderOptions ) } ] , sideEffects : true } ; } export default cssLoader ;