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

Laravel Webpack Mix编译后CSS变量被移除问题如何解决?

问题原因及解决步骤

核心触发原因

你遇到的自定义CSS变量被删除的问题,主要来自两个配置问题:

  1. 你额外引入的postcss-css-variables插件默认会自动清理所有它判定为「未被使用」的自定义CSS变量
  2. 第二个变量的SCSS插值写法错误,SCSS会把无引号的bada-bumm识别为SCSS变量,未定义的情况下会生成无效规则被后续流程清理

解决步骤

  • 方案一(无需兼容IE等极旧浏览器优先用):直接移除postcss-css-variables插件
    Laravel Mix自带的Sass编译本身就支持原生CSS变量的正确输出,不需要额外插件处理,直接删除options里的postCss配置即可,修改后的配置片段如下:
mix.js('resources/' + domain + '/js/app.js', 'public/' + mixPath + '/js')
    .vue()
    .sass('resources/' + domain + '/css/app.scss', 'public/' + mixPath + '/css')
    .copyDirectory('resources/' + domain + '/img/', 'public/' + mixPath + '/img');

同时修正SCSS文件的插值写法:

:root {
    background-color: #bada55;
    #{'--bada-boom'}: #bada55;
    --#{'bada-bumm'}: pink; /* 插值内容加引号,避免SCSS识别为自定义变量 */
}
  • 方案二(需要保留postcss-css-variables做旧浏览器兼容):修改插件配置关闭自动清理规则
    调整options配置,给postcss-css-variables加preserve参数,同时关闭cssnano的自动清理未使用规则逻辑,避免生产环境压缩时变量被删除:
.options({
    postCss: [
        require('postcss-css-variables')({
            preserve: true // 保留所有自定义CSS变量,不自动删除
        })
    ],
    cssNano: {
        preset: ['default', {
            discardUnused: false // 生产环境压缩时禁止删除未使用的CSS规则/变量
        }]
    }
})

同样需要同步修正SCSS文件的插值写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:04