• 解决 webpack 配置 sass-loader后报错,无法正常build


    1. 问题描述

    1. 总是打包build报错,本质上css样式语法也没写错
    2. 在使用 sass-resources-loader 的项目中,开发者常常遇到构建错误或意外的样式行为,这是因为
      sass-resources-loader 的作用和使用场景并不总是被正确理解。sass-resources-loader
      主要用于全局注入 Sass 变量 和 混入,而不适合直接包含实际的 CSS 样式规则。如果 scss
      文件中混入了普通样式定义,可能会导致构建失败或样式重复应用等问题。

    常见问题场景:

    开发者尝试通过 sass-resources-loader 全局引入的 scss 文件中直接包含 CSS 样式。
    variables.scss 和 global.scss 文件中定义了具体的选择器和样式规则,而这些文件应该只包含 Sass
    变量、混入和函数等工具类样式。 项目构建时出现错误,如 Expected digit 或 Unexpected token 等。

    2. 原因分析

    sass-resources-loader 主要用于将 Sass 变量、混入(mixin) 和 函数 等工具类样式注入到每个 scss 文件的作用域中。其作用相当于在每个 scss 文件中隐式地 @import 一次这些工具文件。这意味着 sass-resources-loader 不会将实际的样式插入到每个 scss 文件中,而是仅仅将变量和混入等工具类代码注入。

    因此,sass-resources-loader 的适用范围仅限于工具类样式。如果你在全局引入的 scss 文件中包含普通的 CSS 样式(如选择器和样式定义),这些样式会被反复注入到每个 scss 文件中,导致不必要的重复和冲突。

    // variables.scss
    $primary-color: #333;
    $font-size: 16px;
    
    // 错误:普通的 CSS 选择器和样式不应放在这里
    body {
      font-family: Arial, sans-serif;
      color: $primary-color;
    }
    
    

    3. 解决方案

    为了解决这个问题,需要遵循以下原则:

    1. 确保全局注入的 SCSS 文件只包含工具类样式
      variables.scss 和 global.scss 文件中应仅包含 Sass 变量、混入(mixin) 和 函数,而不要包含实际的 CSS 样式规则。
      示例:正确的工具类 SCSS 文件
    // variables.scss
    $primary-color: #333;
    $font-size-base: 16px;
    
    // mixins.scss
    @mixin flex-center {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    
    ```javascript
    // webpack.config.js
    const path = require('path');
    
    module.exports = {
      module: {
        rules: [
          {
            test: /\.scss$/,
            use: [
              'style-loader',
              'css-loader',
              'sass-loader',
              {
                loader: 'sass-resources-loader',
                options: {
                  // 仅注入工具类文件,不包括普通样式
                  resources: [
                    path.resolve(__dirname, 'src/styles/variables.scss'),
                    path.resolve(__dirname, 'src/styles/mixins.scss'),
                  ],
                },
              },
            ],
          },
        ],
      },
    };
    
    
    
  • 相关阅读:
    UE 视差材质 学习笔记
    通过命令设置Maven/JDK环境变量
    [C/C++]_[中级]_[static_cast的详细解析]
    算法宝典——Java版本(持续更新)
    CSS3------盒模型
    (附源码)计算机毕业设计SSM基于框架的毕业生就业管理系统
    【NOI模拟赛】毒药(交互,构造(?))
    MySQL1
    澜沧古茶在港交所上市申请失效:收入不及八马茶业,股东提前套现
    Sentinel使用Nacos存储规则——Gateway网关服务
  • 原文地址:https://blog.csdn.net/Dou_Hua6/article/details/142182455