如何在Vue 3项目中配置和使用SCSS

 更新时间:2025年11月15日 14:24:26   作者:前端小趴菜-进阶  
本文详细介绍了在Vue3项目中配置和使用SCSS的步骤,包括安装依赖、配置vue.config.js、在组件中使用SCSS、全局样式管理、SCSS模块化以及深度选择器的使用,同时,还提供了解决常见问题和优化建议

🔧 配置SCSS

首先,你需要在Vue 3项目中安装必要的依赖并进行配置。

安装依赖
在项目根目录下,通过npm或yarn安装SCSS编译器及对应的Webpack加载器:

npm install sass sass-loader --save-dev

或者使用yarn:

yarn add sass sass-loader --dev

这里推荐使用sass包(Dart Sass),它是Sass的主要实现,更新和支持更好。

配置vue.config.js
对于Vue CLI创建的项目,通常在项目根目录下创建或修改vue.config.js文件,来配置全局注入SCSS变量或混入(mixins)。

// vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  css: {
    loaderOptions: {
      scss: {
        additionalData: `@import "@/styles/variables.scss";` // 全局变量文件
      }
    }
  }
})

通过loaderOptions.scss.additionalData配置,可以全局引入指定的SCSS文件,使其变量和混入在所有Vue组件中可用。请确保路径正确@/通常指向src目录。

🎨 在组件中使用SCSS

安装并配置好SCSS后,就可以在Vue组件中使用了。

基本使用
在Vue单文件组件的<style>标签中,通过lang="scss"属性即可使用SCSS。

<template>
  <div class="example">
    <h1>Hello SCSS in Vue 3!</h1>
  </div>
</template>
<script setup>
// 你的脚本逻辑
</script>
<style lang="scss" scoped>
.example {
  h1 {
    color: blue;
    font-size: 2em;
    &:hover {
      color: darkblue;
    }
  }
}
</style>

上面的例子展示了SCSS的嵌套和父选择器(&)用法。

🌍 全局样式与变量管理

为了高效管理项目样式,通常会定义一些全局的SCSS文件。

定义全局文件
建议在src/styles/目录下创建一些通用的SCSS文件,例如:

_variables.scss: 用于定义全局变量(如颜色、字体等)。

// _variables.scss
$primary-color: #3498db;
$secondary-color: #2ecc71;
$font-stack: Helvetica, sans-serif;

_mixins.scss: 用于定义混入(mixins)。

// _mixins.scss
@mixin flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
}

index.scss: 主文件,用于引入其他SCSS局部文件。

// index.scss
@import 'variables';
@import 'mixins';

全局引入
main.js中直接引入主SCSS文件,使其全局生效:

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import '@/styles/index.scss' // 引入全局样式
createApp(App).mount('#app')

或者在vue.config.jsadditionalData中引入(如前文所述),这种方式更适合全局变量和混入。

📦 使用SCSS模块化

Vue与SCSS结合支持CSS Modules,用于解决样式冲突问题。

在Vue组件的<style>标签上添加module属性,即可启用CSS Modules功能。模板中通过$style对象访问。

<template>
  <div :class="$style.example">
    <h1>Scoped SCSS Module</h1>
  </div>
</template>
<style lang="scss" module>
.example {
  background-color: $primary-color; /* 使用全局变量 */
  h1 {
    color: red;
  }
}
</style>

🚀 深度选择器

在Vue中,当<style>标签带有scoped属性时,若要修改子组件样式,需要使用深度选择器。

在Vue 2及Vue 3中,推荐使用 ::v-deep

<style lang="scss" scoped>
.container {
  ::v-deep .child-component {
    color: red;
  }
}
</style>
  • ::v-deep 也可用作组合符 ::v-deep(.child-component)
  • 旧有的 /deep/ 选择器在Vue 2.x中可用,但在Vue 3中不推荐使用。

⚠️ 常见问题与技巧

  • 版本兼容性:若遇到 Module build failed: TypeError: this.getResolve is not a function 错误,可能是sass-loader版本过高,可尝试降低版本,例如安装npm install sass-loader@7.3.1 --save
  • 路径别名:在SCSS文件中使用@import时,@别名可能不直接生效。此时可在additionalData中使用相对路径或绝对路径,或者通过Webpack配置解决。
  • 优化建议
    • 遵循BEM等命名规范,提高代码可读性。
    • 将样式按功能拆分为多个小文件(如_button.scss_form.scss),通过index.scss统一引入,便于维护。

到此这篇关于如何在Vue 3项目中配置和使用SCSS的文章就介绍到这了,更多相关vue使用配置scss内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue 使用Ajax异步或同步的方法

    Vue 使用Ajax异步或同步的方法

    本文介绍了Vue中使用Axios动态加载员工列表数据,并通过async/await替代then/catch优化代码结构,同时详解了Vue生命周期的8个阶段及钩子函数应用场景,强调mounted钩子用于初始化数据请求,感兴趣的朋友跟随小编一起看看吧
    2025-07-07
  • 去除element-ui下拉框的下拉箭头的实现

    去除element-ui下拉框的下拉箭头的实现

    我们最开始拿到的element-ui是带有下拉箭头的,那么如何去除element-ui下拉框的下拉箭头的实现,本文就详细的介绍一下,感兴趣的可以了解一下
    2023-08-08
  • 详解vue之页面缓存问题(基于2.0)

    详解vue之页面缓存问题(基于2.0)

    本篇文章主要介绍了vue之页面缓存问题(基于2.0),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • vue实现tab切换的放大镜效果

    vue实现tab切换的放大镜效果

    这篇文章主要为大家详细介绍了vue实现tab切换的放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • vue使用v-model进行跨组件绑定的基本实现方法

    vue使用v-model进行跨组件绑定的基本实现方法

    这篇文章主要给大家介绍了关于vue使用v-model进行跨组件绑定的基本实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Vue-Router基础学习笔记(小结)

    Vue-Router基础学习笔记(小结)

    这篇文章主要介绍了Vue-Router基础学习笔记(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • vue 实现cli3.0中使用proxy进行代理转发

    vue 实现cli3.0中使用proxy进行代理转发

    今天小编就为大家分享一篇vue 实现cli3.0中使用proxy进行代理转发,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Vue 实现分页功能

    Vue 实现分页功能

    Vue提供了丰富的API和组件,可以帮助开发者快速地构建现代化的Web应用程序,本文介绍了Vue如何实现分页功能,包括数据的获取、分页器的实现和页面的渲染
    2023-09-09
  • vue 系列——vue2-webpack2框架搭建踩坑之路

    vue 系列——vue2-webpack2框架搭建踩坑之路

    本文从零搭建vue项目,给大家分享了我的vue2-webpack2框架搭建踩坑之路,需要的朋友可以参考下
    2017-12-12
  • 浅析Vue实例以及生命周期

    浅析Vue实例以及生命周期

    这篇文章给大家分享了Vue实例以及生命周期的相关知识点内容,有兴趣的朋友们可以学习下。
    2018-08-08

最新评论