vue中引入sass、scss

常规步骤

1. 创建项目

使用vue cli 脚手架工具创建项目

vue create xxxx

2. 创建全局样式文件

全局样式变量
路径:@/assets/styles/variables.scss

//flex 布局变量
$--flex-direction: ("row", "column");
$--flex-position: ("start", "center", "end");

布局样式类
路径:@/assets/styles/layout.scss


@each $direction in $--flex-direction {.flex-#{$direction} {display: flex;flex-direction: #{$direction};}@each $p1 in $--flex-position {@each $p2 in $--flex-position {.flex-#{$direction}-#{$p1}-#{$p2} {display: flex;flex-direction: #{$direction};@if $p1!=center {justify-content: flex-#{$p1};} @else {justify-content: #{$p1};}@if $p2!=center {align-items: flex-#{$p2};} @else {align-items: #{$p2};}}}}
}

3. 创建全局公用样式文件

全局共用样式
路径:@/assets/styles/main.scss

@import "@/assets/styles/layout.scss";div {@extend .flex-row;
}

4. 引入全局公用样式

在App.vue或者main.js中映入均可

<template><router-view />
</template><style lang="scss">
@import "@/assets/styles/main.scss";body {margin: 0;padding: 0;border: none;outline: none;
}
#app {position: absolute;top: 0;left: 0;width: 100%;height: 100%;font-family: 微软雅黑;color: #000000;
}
</style>

5. 配置全局样式类文件

在vue.config.js中配置全局样式类,具体配置方法可以参考vue cli官方文档

const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({transpileDependencies: true,css: {loaderOptions: {scss: {additionalData: `@import "~@/assets/styles/variables.scss","~@/assets/styles/layout.scss";`}}}
});

FAQ

1. 样式被多次重复编译

在这里插入图片描述

原因

  1. 产生的原因是因为在vue.config.js中通过@import指令导入了SCSS样式文件`,并且在vue组件库内或者全局样式内再次引入,导致样式类被多次重复编译

  2. vue.config.js是vue编译的入口文件,所以vue在编译时会先加载vue.config.js内配置的SCSS文件,而通过@import指令导入的文件,scss-loader会在编译后将已经编译的全局样式变量、样式类、带入到后续scss文件的编译中

解决方法

  1. 去掉多余的引用文件

例如以下代码,在main.scss中引入了layout.scss文件,而layout.scss文件已经在vue.config.js中配置了载入,所以这里无需再引入

@import "@/assets/styles/layout.scss";div {@extend .flex-row;
}
  1. 使用@use指令导入文件,避免文件被多次编译
@use "@/assets/styles/layout.scss" as *;div {@extend .flex-row;
}
  1. vue.config.js只配置工具性样式文件,如果全局变量文件、全局样式类文件;不要引入非工具性样式文件,例如全局组件样式、main.scss等。所以同理在App.vue文件中只引入非工具性样式文件,因为如果在App.vue文件中引入工具性样式文件不生效的,因为vue项目中,只有在vue.config.js中配置的样式文件,才会被编译到每个vue组件样式内

如以下代码,同样会产生多次重复编译

const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({transpileDependencies: true,css: {loaderOptions: {scss: {additionalData: `@import "~@/assets/styles/main.scss";`}}}
});

2. 样式类、变量名找不到

在这里插入图片描述

原因

  1. 原因1:scss-loader在编译scss时,是根据从上到下,从前到后的顺序编译,如果文件内的类名不在scss-loader的堆栈内时,就会抛出以上错误
  2. 原因2:@use导入的文件只对当前文件上下文有效,不会成为全局属性

解决方法

  1. 原因1:检查引入scss文件的顺序是否正确

例如如下代码:当variables.scss文件位于layout.scss文件后时,在编译layout.scss时就会抛出变量不存在错误,因为此时scss-loader的堆栈中没有对应的变量

const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({transpileDependencies: true,css: {loaderOptions: {scss: {additionalData: `@import "~@/assets/styles/layout.scss","~@/assets/styles/variables.scss";`}}}
});
  1. 原因2:
  • 如果报错位置是在scss文件中:需要检查对应的文件是否被引入,如果没有引入,需要引入对应的文件
  • 如果报错位置是在vue组件内,需要查看vue.config.js的配置中是否引入了对应的文件

3. @use rules must be written before any other rules.

原因

  1. 原因1:被引用文件内存在使用@use指令导入,而引用文件通过@import指令导入被引用文件;因为@use指令不能和其他指令混合
  2. 原因2:@use指令写在了 @import指令后

解决方法

  1. 问题1:所以在引用文件内使用@use ‘xxxxx’ as * 作为导入语法
@use '~@/xxx/xxx' as *;
  1. 问题2:所有的@use指令必须放在最前面
@use '~@/xxx/xxx' as *;
@import '~@/xxx/xx';

4. Private members can’t be accessed from outside their modules.

原因

  1. 问题产生原因是,当使用@use导入文件后,因为被应用文件在声明变量或方法时在方法时,在变量名或方法名前添加了-或者_,导致变量或方法成为了当前模块 的私有变量或私有方法
  2. 通过@use方法导入的文件,都会被sass认为是一个单独的模块,每个模块之间是相互独立的,所以要想使用某个模块属性,就必须是非私有属性,这也就是为什么,@use可以避免样式被重复编译,因为每个模块只会编译一次

解决方法

  1. 去掉非私有属性前的-_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416998.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【手撕C语言 第五集】分支和循环(下)

for循环 我们已经知道了while循环&#xff0c;但是我们为什么还要一个for循环呢&#xff1f; 首先来看看for循环的语法&#xff1a; 表达式1 表达式1为初始化部分&#xff0c;用于初始化循环变量的。 表达式2 表达式2为条件判断部分&#xff0c;用于判断循环时候终止。 表达式…

论rtp协议的重要性

rtp ps流工具 rtp 协议&#xff0c;实时传输协议&#xff0c;为什么这么重要&#xff0c;可以这么说&#xff0c;几乎所有的标准协议都是国外创造的&#xff0c;感叹一下&#xff0c;例如rtsp协议&#xff0c;sip协议&#xff0c;webrtc&#xff0c;都是以rtp协议为基础&#…

MCM备赛笔记——熵权法

Key Concept 熵权法是一种基于信息熵概念的权重确定方法&#xff0c;用于多指标决策分析中。信息熵是度量信息量的不确定性或混乱程度的指标&#xff0c;在熵权法中&#xff0c;它用来反映某个指标在评价过程中的分散程度&#xff0c;进而确定该指标的权重。指标的分散程度越高…

【ARMv8M Cortex-M33 系列 7.1 -- xPSR | CFSR | HFSR | BFAR | MMFAR 寄存器】

请阅读【嵌入式开发学习必备专栏 之 ARM Cortex-Mx专栏】 文章目录 问题背景Cortex-M33 Fault 寄存器介绍xPSR (程序状态寄存器)CFSR (可配置故障状态寄存器)HFSR (硬件故障状态寄存器)BFAR (总线故障地址寄存器)MMFAR (内存管理故障地址寄存器) 问题背景 由于在RA4M2&#xf…

后面的输入框与前面的联动,输入框只能输入正数(不用正则)

概要 提示&#xff1a;这里可以描述概要 前面的输入框是发票金额&#xff0c;后面的输入框是累计发票金额&#xff08;含本次&#xff09;--含本次就代表后倾请求的接口的数据&#xff08;不是保存后返显的-因为保存后返显的是含本次&#xff09;是不含本次的所以在输入发票金…

【大坑】MyBatisPlus使用updateById莫名将数据四舍五入了

问题描述 我目前在为本地的一所高中开发一个成绩分析的网站&#xff0c;后端使用的是SpringBootMyBatisPlus&#xff0c;业务逻辑是用户在前端上传EXCEL文件&#xff0c;后端从文件中读取成绩存到数据库用于分析。但是奇怪的是&#xff1a;在后端&#xff0c;进入数据库之前的…

【正点原子STM32连载】 第四十二章 触摸屏实验 摘自【正点原子】APM32E103最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子APM32E103最小系统板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第四…

“深入理解 Docker 和 Nacos 的单个部署与集成部署“

目录 引言&#xff1a;Docker Nacos 单个部署1.1 什么是 Docker&#xff1f;Docker 的概念和工作原理Docker 为什么受到广泛应用和认可 1.2 什么是 Nacos&#xff1f;Nacos 的核心功能和特点Nacos 在微服务架构中的作用 1.3 Docker 单个部署 Nacos Docker Nacos 集成部署总结&a…

java8 列表通过 stream流 根据对象属性去重的三种实现方法

java8 列表通过 stream流 根据对象属性去重的三种实现方法 一、简单去重 public class DistinctTest {/*** 没有重写 equals 方法*/SetterGetterToStringAllArgsConstructorNoArgsConstructorpublic static class User {private String name;private Integer age;}/*** lombo…

积分梳状滤波器CIC原理与实现

CIC&#xff08;Cascade Intergrator Comb&#xff09;&#xff1a;级联积分梳状滤波器&#xff0c;是由积分器和梳状滤波器级联而得。滤波器系数为1&#xff0c;无需对系数进行存储&#xff0c;只有加法器、积分器和寄存器&#xff0c;资源消耗少&#xff0c;运算速率高&#…

MyBatis 使用报错: Can‘t generate mapping method with primitive return type

文章目录 前言问题原因解决方案个人简介 前言 今天在新项目中使用 MyBatis 报如下错误&#xff1a;Cant generate mapping method with primitive return type 问题原因 发现是 Mapper 注解引入错误&#xff0c;错误引入 org.mapstruct.Mapper, 实际应该引入 org.apache.ibat…

python实操之网络爬虫介绍

一、什么是网络爬虫 网络爬虫&#xff0c;也可以叫做网络数据采集更容易理解。它是指通过编程向网络服务器&#xff08;web&#xff09;请求数据&#xff08;HTML表单&#xff09;&#xff0c;然后解析HTML&#xff0c;提取出自己想要的数据。 它包括了根据url获取HTML数据、解…