sass在1.80版本以上有不少使用发生了变化。以下几点是我新装最新版本sass遇到的问题:
在之前版本都是使用@import来对样式文件进行引用的,升级到最新版后你会发现报错了:
@import'./variables.scss' // Deprecation Warning: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
解决办法就是使用@use 或者@forward 来进行引用:
@forward './variables.scss'
如果控制台警告:
Deprecation 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’]
scss: {
api: 'modern-compiler',
silenceDeprecations: ['legacy-js-api']
}
}
最后就是additionalData引用variables.scss或者index.scss:
additionalData: `@use "@/assets/style/index.scss" as *;`
这里要使用@use 而不是@improt 再后面还要加上 as *。这是因为使用@use 导入的变量不是直接暴露在当前作用域的。而是会带上文件名作为命名空间。这是什么意思呢?看下面代码就明白了:
如果不加as * 会报错:
<style lang="scss" scoped>
.text {
font-size: 20px;
color: $theme-color;
}
</style>
————————————————————————————————————————————————————————————
[vite] Pre-transform error: [sass] Undefined variable.
╷
4 │ color: $theme-color;
│ ^^^^^^^^^^^^
╵
src\views\index.vue 4:10 root stylesheet
如果你不想加as * 但又不想报错那就需要这么做:
1、直接在需要文件中直接导入公共文件,然后在使用。
2、如下:
<style lang="scss" scoped>
.text {
font-size: 20px;
color: index.$theme-color; //否则就需要在这个公共变量前加上文件名
}
</style>
variables.scss文件:
$theme-color:#605BD7
index.scss文件:
@forward './variables.scss';
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
vite.config.js配置文件:
css: {
preprocessorOptions: {
scss: {
api: 'modern-compiler',
silenceDeprecations: ['legacy-js-api'],
additionalData: `@use "@/assets/style/index.scss" as *;`
}
}
}
vue文件:
<style lang="scss" scoped>
.text {
font-size: 20px;
color: $theme-color;
}
</style>
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- nryq.cn 版权所有 赣ICP备2024042798号-6
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务