解决 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 文件中,导致不必要的重复和冲突。

javascript 复制代码
// 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 文件
javascript 复制代码
// 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'),
              ],
            },
          },
        ],
      },
    ],
  },
};
相关推荐
摇摇奶昔x13 小时前
webpack 学习
前端·学习·webpack
小杨升级打怪中21 小时前
前端面经-webpack篇--定义、配置、构建流程、 Loader、Tree Shaking、懒加载与预加载、代码分割、 Plugin 机制
前端·webpack·node.js
Dontla2 天前
Webpack DefinePlugin插件介绍(允许在编译时创建JS全局常量,常量可以在源代码中直接使用)JS环境变量
运维·javascript·webpack
隐含2 天前
webpack打包,把png,jpg等文件按照在src目录结构下的存储方式打包出来。解决同一命名的图片资源在打包之后,重复命名的图片就剩下一个图片了。
前端·webpack·node.js
胡桃夹夹子2 天前
【前端优化】vue2 webpack4项目升级webpack5,大大提升运行速度
前端·javascript·vue.js·webpack·性能优化
GISer_Jing4 天前
编译原理AST&以Babel为例进行解读、Webpack中自定义loader与plugin
前端·webpack·node.js
GISer_Jing4 天前
Webpack中Compiler详解以及自定义loader和plugin详解
前端·webpack·node.js
cdcdhj4 天前
vue用通过npm的webpack打包编译,这样更适合灵活配置的项目
vue.js·webpack·npm
augenstern4166 天前
webpack重构优化
前端·webpack·重构
Dontla6 天前
何时需要import css文件?怎么知道需要导入哪些css文件?为什么webpack不提示CSS导入?(导入css导入规则、css导入规范)
前端·css·webpack