vue中引入sass、scss

这篇具有很好参考价值的文章主要介绍了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. 样式被多次重复编译

vue中引入sass、scss,FAQ,vue.js,sass,scss

原因

  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. 样式类、变量名找不到

vue中引入sass、scss,FAQ,vue.js,sass,scss

原因

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

解决方法

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

例如如下代码:当variables.scss文件位于layout.scss文件后时,在编译layout.scss时就会抛出变量不存在错误,因为此时scss-loader的堆栈中没有对应的变量文章来源地址https://www.toymoban.com/news/detail-796873.html

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. 去掉非私有属性前的-_

到了这里,关于vue中引入sass、scss的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Sass 和 SCSS

    Sass 和 SCSS

    ▣Sass (Syntactically Awesome StyleSheets),是由 buby语言 编写的一款 css预处理语言 ,和html一样有 严格的缩进风格 ,和css编写规范有着很大的出入,是不使用花括号和分号的,所以不被广为接受。 Sass 是一款强化 CSS 的辅助工具,是对 CSS 的扩展 ,它在 CSS 语法的基础上增加了 变量

    2023年04月08日
    浏览(8)
  • sass和scss 有何区别?

    Sass(Syntactically Awesome Style Sheets)和 SCSS(Sassy CSS)都是用于编写样式表的CSS预处理器,它们有很多相似之处,但也有一些重要的区别: 1、语法差异: Sass 使用缩进来表示代码块,类似于Python。它使用缩进和换行符来区分不同的代码块。 SCSS 使用更类似于传统CSS的语法,使用花

    2024年02月09日
    浏览(11)
  • Frontend - SASS / SCSS 文件使用

    目录 一、安装所需依赖 1. django-compressor  2. django-sass-processor 二、settings.py 文件配置 三、html使用 1. 配置 2. 导入 1. django-compressor  2. django-sass-processor 安装依赖,可参考另一篇文章:Backend - 安装依赖(pip 、tar.gz)_python通过tar.gz包安装依赖包-CSDN博客 1. 配置 2. 导入

    2024年01月24日
    浏览(7)
  • CSS革命:用Sass/SCSS引领前端创新

    在现代的前端开发中,CSS已成为呈现网页和应用程序样式的核心。然而,原生的CSS语法在大型项目中可能变得混乱、冗长且难以维护。 为了解决这些问题,SCSS(Sass CSS)和Sass(Syntactically Awesome Style Sheets)应运而生。 本文将带你简单了解sass和scss。 sass中文网 scss中文网 SCSS(

    2024年02月13日
    浏览(10)
  • Less、Sass/Scss是什么?他们有什么区别?

    是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量、继承、运算、函数。 Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可在服务端运行。 是一种动态样式语言,Sass语法属于缩排语法, 比css比多出好些功能(如变量、嵌套、运算,混入(Mixin)、继承、颜色处理,

    2023年04月22日
    浏览(14)
  • vue、uniapp如何在js中获取scss的变量

    vue、uniapp如何在js中获取scss的变量

    举例:在uniapp中会有一个uni.scss文件,我这边声明了一个$my-nav-bgColor的变量 uni.scss已经预处理过了,我们不需要引入可以直接使用 需要在uni.scss中导出 在你要用的页面引入 就可以正常使用了 自己定义的scss文件同样,只是多了一步引入

    2024年02月10日
    浏览(9)
  • 一文分清:Less、Sass、Scss、stylus,看看与css的对比

    一文分清:Less、Sass、Scss、stylus,看看与css的对比

    CSS 预处理器是一种将预先定义的语法和功能添加到 CSS 中的工具。它们允许开发人员使用变量、嵌套规则、混合、继承等功能,以更高效和可维护的方式编写样式表。   CSS 预处理器的作用包括: 变量和计算 :预处理器允许开发人员使用变量来存储颜色、字体、尺寸等值,以

    2024年01月25日
    浏览(15)
  • SCSS 学习笔记 和 vscode下载live sass compiler插件配置

    SCSS 学习笔记 和 vscode下载live sass compiler插件配置

    SCSS 是一个 CSS 的预处理器,是 CSS 的扩展语言,可以帮助我们减少重复的代码,生成更好的 CSS 格式化代码,并且兼容所有版本的 CSS SCSS 是 对于 CSS3 的 SASS ,所以我们学的时候,把文件后缀写为 “.scss” 由于我们的配置,当遇到兼容性代码,出口文件会自动配置,如下图

    2024年02月12日
    浏览(11)
  • uni-app 之 安装uView,安装scss/sass编译

    uni-app 之 安装uView,安装scss/sass编译

    uni-app 之 安装uView,安装scss/sass编译 image.png image.png image.png 点击HBuilder X 顶部,工具,插件安装,安装新插件 image.png image.png 安装成功! 注意,一定要先登录才可以安装 image.png 1. 引入uView主JS库 在项目根目录中的 main.js 中,引入并使用uView的JS库,注意这两行要放在 import Vu

    2024年02月10日
    浏览(14)
  • 【前端面经】CSS-less/sass/scss的区别和基本使用

    随着Web开发的不断发展,CSS预处理器变得越来越流行。它们为Web开发者提供了一种更高效、更简便的CSS编写方式。Less、Sass以及SCSS作为最受欢迎的三种CSS预处理器,它们都为CSS编写提供了不同的特点和功能。 在本篇博客中,我们将会探讨这三种预处理器之间的区别以及它们的

    2024年02月06日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包