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

执行npm run prod时输出错误:Laravel Mix编译Sass变量异常

解决Laravel Mix prod模式编译CSS变量报错的问题

看起来你遇到的问题是开发模式(npm run dev)编译正常,但生产模式(npm run prod)编译CSS变量时出错——这种情况大多和Laravel Mix在生产环境默认启用的CSS压缩优化逻辑有关,下面是具体的排查和解决步骤:

1. 先检查依赖变量是否存在

你的代码里--sg-card-produto-hover-border-color引用了var(--sg-cor-botao),首先要确认这个被引用的变量已经在:root选择器里提前定义了。生产模式下的CSS优化工具会更严格,若引用了未定义的变量,可能触发报错或异常处理。

正确的:root结构应该是这样的(确保--sg-cor-botao在引用前定义):

:root {
    /* 先定义被依赖的变量 */
    --sg-cor-botao: #你的按钮颜色值;
    /* 你的其他变量 */
    --sg-card-produto-hover-bg: #c3c3c3;
    --sg-card-produto-hover-box-shadow: 0 0 15px rgba(0, 0, 0, .8);
    --sg-card-produto-hover-border-width: 2px;
    --sg-card-produto-hover-border-style: solid;
    --sg-card-produto-hover-border-color: var(--sg-cor-botao);
}

2. 调整Laravel Mix的CSS压缩配置

Laravel Mix在生产模式默认使用cssnano做CSS压缩,而默认的cssnano预设可能会对CSS变量做一些“过度优化”(比如尝试压缩未识别的变量、移除被判定为“未使用”的变量),导致编译报错。

你可以在webpack.mix.js里自定义cssnano的配置,禁用这些可能影响CSS变量的优化项:

mix.sass('resources/sass/app.scss', 'public/css')
    .options({
        cssNano: {
            preset: ['default', {
                discardUnused: false, // 禁止移除被判定为未使用的变量
                reduceVars: false,    // 禁用CSS变量压缩
                mergeRules: false     // 禁止合并CSS规则,避免变量引用混乱
            }]
        }
    });

3. 排查依赖版本问题

旧版本的laravel-mix、cssnano或postcss可能对CSS变量的支持不完善,尝试更新相关依赖:

npm update laravel-mix cssnano postcss autoprefixer

更新完成后,清理缓存再重新编译:

npm run clean && npm run prod

4. 临时禁用CSS压缩验证问题

如果上面的方法都没解决,可以先临时禁用生产模式下的CSS压缩,确认是否是压缩逻辑导致的问题:

mix.sass('resources/sass/app.scss', 'public/css')
    .options({
        cssNano: false
    });

如果此时npm run prod能正常编译,就可以确定是cssnano的配置问题,再回到步骤2调整具体的优化项即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:27:27