我已经使用 Vue 3.2.33 和 Vite 2.9.5 设置了一个项目
当我尝试从任何 vue 组件中访问任何全局变量或 mixin 时,我收到未定义的错误。 scss 文件中不会出现此问题。
导入本身似乎工作正常,因为其中的任何 css 规则都有效。
vite.config.ts:
import { fileURLToPath, URL } from 'url';
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
css: {
preprocessorOptions: {
scss: {
additionalData: '@use "@/styles/variables";',
},
},
},
});
src/styles/_variables.scss:
// breakpoints
$breakpoints: (
"sm": 576px,
"md": 768px,
"lg": 992px,
"xl": 1200px,
"xxl": 1400px,
);
@mixin test {
border: 3px solid red;
}
使用示例:
<style scoped lang="scss">
@use 'sass:map';
.container {
max-width: 100%;
width: 100%;
margin: 0 auto;
@include test; // <- undefined
&--fluid {
max-width: 100%;
width: 100%;
}
}
$widths: (
'sm': 540px,
'md': 720px,
'lg': 960px,
'xl': 1140px,
'xxl': 1320px,
);
@each $breakpoint, $width in $widths {
@media (min-width: map.get($breakpoints, $breakpoint)) { // <- $breakpoints undefined
.container {
max-width: $width;
}
}
}
</style>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
使用
在你的 vite 配置中而不是
vite.config.ts:export default defineConfig({ plugins: [vue()], css: { preprocessorOptions: { scss: { additionalData: '@import "./src/styles/variables.scss";', }, }, }, });请记住,您不能在
main.ts文件中再次导入相同的文件variables.scss,否则,您将收到此错误顺便说一句,您也可以按照您提到的方式在每个组件中手动导入
scss文件,但这确实很乏味,因此在preprocessorOptions中使用全局导入对于像variables.scss文件这样全局使用的文件来说,vite.config.ts是一个更好的选择。我已经设法“解决”了这个问题。事实证明,当我替换文件导入的所有
@use规则时,sass 代码已正确导入并可以工作。但这会产生一个新问题,因为@import规则不能放在@use之前,因此我必须从配置中删除additionalData键并手动包含导入。