最新版sass

作者自己写这篇文章时的最新版本1.80.6

sass在1.80版本以上有不少使用发生了变化。以下几点是我新装最新版本sass遇到的问题:

在之前版本都是使用@import来对样式文件进行引用的,升级到最新版后你会发现报错了:

 1@import'./variables.scss'

解决办法就是使用@use 或者@forward 来进行引用:

 1@forward './variables.scss'

如果控制台警告:

 1Deprecation Warning: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.

解决方法:
在css的preprocessorOptions选项中配置:api: ‘modern-compiler’, 配置完后还是会有这个警告的话那就再加上配置:silenceDeprecations: [‘legacy-js-api’]

 1scss: {
 2          api: 'modern-compiler',
 3          silenceDeprecations: ['legacy-js-api']
 4        }
 5      }

最后就是additionalData引用variables.scss或者index.scss:

 1additionalData: @use "@/assets/style/index.scss" as *;

这里要使用@use 而不是@improt 再后面还要加上 as *。这是因为使用@use 导入的变量不是直接暴露在当前作用域的。而是会带上文件名作为命名空间。这是什么意思呢?看下面代码就明白了:
如果不加as * 会报错:

 1<style lang="scss" scoped>
 2.text {
 3  font-size: 20px;
 4  color: $theme-color;
 5}
 6</style> 
 7————————————————————————————————————————————————————————————
 8 [vite] Pre-transform error: [sass] Undefined variable.
 9
104color: $theme-color;
11^^^^^^^^^^^^
12
13  src\views\index.vue 4:10  root stylesheet

如果你不想加as * 但又不想报错那就需要这么做:
1、直接在需要文件中直接导入公共文件,然后在使用。
2、如下:

 1<style lang="scss" scoped>
 2.text {
 3  font-size: 20px;
 4  color: index.$theme-color;  //否则就需要在这个公共变量前加上文件名
 5}
 6</style>

友情提醒一下:使用 as * 有可能会造成样式全局污染。所以使用时要注意管理好变量的命名

以下为个人sass的完整引用及配置:

variables.scss文件:

 1$theme-color:

index.scss文件:

 1@forward './variables.scss';
 2* {
 3  margin: 0;
 4  padding: 0;
 5  box-sizing: border-box;
 6}

vite.config.js配置文件

 1css: {
 2      preprocessorOptions: {
 3        scss: {
 4          api: 'modern-compiler',
 5          silenceDeprecations: ['legacy-js-api'],
 6          additionalData: `@use "@/assets/style/index.scss" as *;`
 7        }
 8      }
 9    }

vue文件:

 1<style lang="scss" scoped>
 2.text {
 3  font-size: 20px;
 4  color: $theme-color;
 5}
 6</style>
个人笔记记录 2021 ~ 2025