当前位置: 首页 > news >正文

解决 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'),],},},],},],},
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • EasyExcel 学习之 导出 “类型及精度问题”
  • requests请求设置超时时间python
  • Debezium系列之:大规模应用debezium server采集数据库,从每个Debezium Server中导出JMX采集指标
  • 怎么利用接口发送图文彩信
  • 所有即将登陆iPhone 16的Apple智能功能以及预期发布时间
  • 监听键盘事件
  • 每日一练:回文链表
  • 【C#跨平台开发详解】C#跨平台开发技术之.NET Core基础学习及快速入门
  • 并发编程 - GCD信号量
  • 内网与外网的区别
  • 【北京迅为】《STM32MP157开发板使用手册》- 第二十章 Trusted Firmware-A 移植+第二十一章 U-Boot移植
  • HarmonyOS开发实战( Beta5.0)自定义装饰器实践规范
  • 掌握Python自动化:探索keymousego库的无限可能!
  • Oracle OCP认证值得考吗? 需要门槛吗?
  • 【软件设计师真题】下午题第四大题---算法设计
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • Android组件 - 收藏集 - 掘金
  • C++类的相互关联
  • IDEA 插件开发入门教程
  • IDEA常用插件整理
  • input的行数自动增减
  • Java面向对象及其三大特征
  • Laravel Mix运行时关于es2015报错解决方案
  • MySQL-事务管理(基础)
  • PHP CLI应用的调试原理
  • React系列之 Redux 架构模式
  • Sublime text 3 3103 注册码
  • ucore操作系统实验笔记 - 重新理解中断
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 大主子表关联的性能优化方法
  • 猴子数据域名防封接口降低小说被封的风险
  • 理解在java “”i=i++;”所发生的事情
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 源码安装memcached和php memcache扩展
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Linux权限管理(week1_day5)--技术流ken
  • 从如何停掉 Promise 链说起
  • ​批处理文件中的errorlevel用法
  • #stm32整理(一)flash读写
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (04)odoo视图操作
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (转)菜鸟学数据库(三)——存储过程
  • (转)大道至简,职场上做人做事做管理
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net 生成二级域名
  • .net6Api后台+uniapp导出Excel
  • .NET6实现破解Modbus poll点表配置文件
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • ::