You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Mix编译Sass后浏览器开发者工具出现重复CSS问题

Laravel Mix + React 项目重复CSS规则修复方案

根因说明

  • 多个React组件重复引入同一份Sass文件,Laravel Mix默认无样式去重逻辑,每份引入的Sass都会被独立编译输出,导致同一条CSS规则重复出现
  • 现有配置缺少CSS合并压缩插件,且PurgeCSS路径配置错误,无法清理重复、无效的样式规则

解决步骤

1. 调整样式引入规范

  • 拆分样式文件类型:全局公共样式、工具类Sass(变量、mixin、函数,无实际CSS输出)、组件私有样式
  • 全局公共样式仅在入口文件resources/website/index.js中引入一次,组件内禁止重复引入全局样式
  • 工具类Sass使用@use/@forward语法引入,替换原有的@import语法,避免重复编译

2. 新增CSS去重插件

首先安装依赖:

npm install css-minimizer-webpack-plugin --save-dev

更新Laravel Mix配置文件,完整配置如下:

const mix = require('laravel-mix');
const path = require('path');
const glob = require('glob');
const PurgeCSSPlugin = require('purgecss-webpack-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');

//-- Website Mix --
mix.babelConfig({
   plugins: ['@babel/plugin-syntax-dynamic-import', '@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-optional-chaining'],
});

mix.webpackConfig({
    watchOptions: {
        ignored: /node_modules/
    },
    stats: {
        warnings: false,
    },
    optimization: {
        minimizer: [
            `...`,
            new CssMinimizerPlugin({
                minimizerOptions: {
                    preset: [
                        'default',
                        { mergeRules: true }
                    ]
                }
            })
        ]
    },
    output: {
        chunkFilename: 'website/js/chunks/[chunkhash].js',
    },
    resolve: {
        alias: {
            '@fonts': path.resolve(__dirname, 'resources/website/styles/fonts'),
            '@images': path.resolve(__dirname, 'resources/website/images')
        }
    },
    plugins: [
        new PurgeCSSPlugin({
            paths: glob.sync(path.join(__dirname, 'resources/website/**/*.{js,jsx}'),  { nodir: true }),
            safelist: {
                standard: [] // 可填写需要保留的类名规则,避免PurgeCSS误删
            }
        })
    ]
});

mix.options({
    postCss: [
        require('autoprefixer'),
    ],
    fileLoaderDirs:  {
        fonts: 'website/fonts',
        images: 'website/images'
    }
});

mix.js('resources/website/index.js', 'public/website/js').react();
mix.version();
//-- Website Mix End --

3. 重新编译验证

执行npm run production触发生产环境编译,完成后打开浏览器开发者工具查看,重复的@media规则和.side-double类样式会被合并为单条。

内容的提问来源于stack exchange,提问作者YaBCK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:45:04