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

Webpack 5迁移:mini-css-extract-plugin丢失自研SCSS文件求助

解决Webpack 5迁移后mini-css-extract-plugin提取自研SCSS为空的问题

先看你提供的截图:
浏览器中app.css的空占位区域

结合你的loader配置,给出几个针对性的排查和修复方案:

1. 调整loader执行顺序

Webpack loader是从右到左、从下到上执行的,你的sass-resources-loader放在了sass-loader后面,这会导致资源注入在sass编译之后,完全起不到作用,还可能干扰编译结果。把它移到sass-loader前面:

{
  test: /\.scss$/i,
  use: [
    MiniCssExtractPlugin.loader,
    'css-loader',
    'resolve-url-loader',
    {
      loader: 'sass-resources-loader',
      options: {
        resources: require(path.join(process.cwd(), 'src/assets/css/scssUtils.js'))
      }
    },
    {
      loader: 'sass-loader',
      options: {
        sourceMap: true,
        additionalData (source, loaderContext) {
          if (loaderContext.resourcePath.endsWith('_library.scss')) {
            return source
          }
          return '@use \'~@/assets/css/_library\';'
        }
      }
    }
  ]
}

2. 完善sourceMap配置

Webpack 5中resolve-url-loader需要依赖上游loader的sourceMap才能正常工作,你已经给sass-loader开了sourceMap,还要给css-loader也加上:

{
  loader: 'css-loader',
  options: {
    sourceMap: true
  }
}

3. 检查@别名与~的解析

Webpack 5默认不再支持用~来解析node_modules或别名,如果你用@指代src目录,直接去掉~试试:

// 将原来的
return '@use \'~@/assets/css/_library\';'
// 改成
return '@use \'@/assets/css/_library\';'

同时确保你的resolve.alias里正确配置了@:

resolve: {
  alias: {
    '@': path.resolve(__dirname, 'src')
  }
}

4. 确认插件版本兼容性

Webpack 5需要搭配mini-css-extract-plugin v2.x及以上版本,检查你的package.json里的版本,低于v2的话直接升级:

npm install mini-css-extract-plugin@latest --save-dev

5. 排查additionalData的逻辑

如果你的_library.scss本身依赖了其他未被正确解析的文件,也可能导致整个自研SCSS编译异常。可以临时注释掉additionalData的逻辑,只保留基础的SCSS编译,看是否能正常提取内容,逐步排查问题点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:11:37