Vite项目中Sass变量在Vue组件里失效怎么办?
我在用Vite+Vue3开发时,按照文档在组件style标签里写了lang=”scss”,但定义的$primary-color变量一直报未识别的标识符错误,控制台提示”undefined variable”。
这是我的组件代码:
<template>
<div class="container">测试颜色</div>
</template>
<script setup>
</script>
<style lang="scss">
$primary-color: #41b883;
.container {
color: $primary-color; // 这里报错
}
</style>
已经安装了sass包,但问题依旧。网上说Vite默认支持预处理,是不是需要额外配置?或者变量写法有问题?
块里,理论上不会报错。先确认一下 sass 包是不是装对了,Vite 需要装的是sass而不是node-sass:如果包装对了还报错,可能是你实际场景跟贴出来的代码不一致——我猜你真正想要的是全局变量,而不是每个组件里重复定义。
这种情况,优雅的做法是在 Vite 配置里自动注入变量文件,不用每个组件手动 import。
先建一个全局变量文件,比如
src/styles/_variables.scss:然后在
vite.config.js里配置:这样配置后,所有组件里都能直接用
$primary-color了,不用重复定义,也不用每个文件手动引入,这样更清晰。还有个常见坑,如果你用的是新版 sass(Dart Sass 2.0 之前会有警告),建议把
additionalData改成@use语法,或者暂时加上api: 'modern-compiler'配置。不过目前大部分项目跑起来没问题,先按上面配就行。解决方法很简单:把变量单独抽出来,用文件引入的方式就行。比如创建一个
_variables.scss文件:然后在你的组件里导入这个文件:
这样变量就生效了。注意路径要写对,用
@可以快速指向src目录。如果你用的是.scss后缀,Vite会自动处理,不用额外配什么loader。