一、项目环境 (node18.18.0)

二、基础配置(必需项)
scss: {
api: 'modern-compiler',
charset: false,
additionalData: `
@use "sass:color"; // 颜色操作函数:adjust(), mix(), scale()等
@use "sass:math"; // 数学计算函数:div(), percentage(), sqrt()等
@use "sass:meta"; // 元编程函数:variable-exists(), function-exists()等
@use "sass:string"; // 字符串处理函数:index(), insert(), slice()等
@use "sass:list"; // 列表操作函数:append(), index(), join()等
@use "sass:map"; // 映射操作函数:get(), merge(), remove()等
@use "@/styles/variables.scss" as *; // 全局变量(颜色、间距、字体等)
@use "@/styles/mixins.scss" as *; // 全局Mixin函数
@use "@/styles/functions.scss" as *; // 自定义函数
`
}
三、高级配置(可选项)
scss: {
api: 'modern-compiler',
charset: false,
includePaths: [
path.resolve(__dirname, 'src/styles'),
path.resolve(__dirname, 'node_modules'),
path.resolve(__dirname, 'src/components'),
],
sourceMap: process.env.NODE_ENV !== 'production',
sourceMapIncludeSources: true,
outputStyle: process.env.NODE_ENV === 'production' ? 'compressed' : 'expanded',
silenceDeprecations: [
'legacy-js-api',
'global-builtin',
],
debug: process.env.NODE_ENV !== 'production',
verbose: false,
functions: {
'rem($px)': function(pxValue) {
const px = pxValue.getValue();
return new sass.SassString(`${px / 16}rem`);
},
'css-var($name)': function(nameValue) {
const name = nameValue.getValue();
return new sass.SassString(`var(--${name})`);
}
},
importer: [
(url, prev) => {
if (url.startsWith('@/')) {
return {
file: path.resolve(__dirname, 'src', url.replace('@/', ''))
};
}
if (url.startsWith('~')) {
return {
file: path.resolve(__dirname, 'node_modules', url.replace('~', ''))
};
}
return null;
}
],
additionalData: `
// ========== SASS模块导入 ==========
@use "sass:color";
@use "sass:math";
@use "sass:meta";
@use "sass:string";
@use "sass:list";
@use "sass:map";
@use "sass:selector";
// ========== 全局样式资源 ==========
@use "@/styles/variables.scss" as *;
@use "@/styles/mixins.scss" as *;
@use "@/styles/functions.scss" as *;
@use "@/styles/animations.scss" as *;
// ========== 第三方库样式 ==========
@use "element-plus/theme-chalk/src/common/var.scss" as *;
// ========== 自定义全局变量 ==========
$env: '${process.env.NODE_ENV}'; // 注入环境变量
$build-time: '${new Date().toISOString()}'; // 构建时间戳
`
}
四、环境特定配置
const devConfig = {
scss: {
sourceMap: true,
outputStyle: 'expanded',
debug: true,
verbose: false
}
}
const prodConfig = {
scss: {
sourceMap: false,
outputStyle: 'compressed',
debug: false,
charset: false
}
}
五、完整的最佳实践配置
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '')
return {
plugins: [vue()],
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
},
},
css: {
preprocessorOptions: {
scss: {
api: 'modern-compiler',
charset: false,
includePaths: [
resolve(__dirname, 'src/styles'),
resolve(__dirname, 'node_modules')
],
sourceMap: mode !== 'production',
outputStyle: mode === 'production' ? 'compressed' : 'expanded',
silenceDeprecations: ['legacy-js-api', 'global-builtin'],
additionalData: `
// 环境变量注入
$env: '${mode}';
$api-base: '${env.VITE_API_BASE || ''}';
// SASS模块
@use "sass:color";
@use "sass:math";
@use "sass:meta";
// 项目资源
@use "@/styles/variables.scss" as *;
@use "@/styles/mixins.scss" as *;
// 第三方库变量(可选)
@forward "element-plus/theme-chalk/src/common/var.scss" as el-*;
`
}
}
}
}
})
六、配置说明与注意事项
1. api
选项说明
modern-compiler
: 使用最新编译器API,无警告推荐
compiler
: 传统编译器API,可能有少量警告
legacy
: 遗留API,兼容旧项目但警告多
auto
: 自动选择(默认)
2. additionalData
最佳实践
- 按功能分组导入语句
- 先导入
SASS
模块,再导入项目文件
- 最后导入第三方库文件
- 可注入环境变量和构建信息
3. 性能优化建议
- 生产环境禁用
sourcemap
减少体积
- 使用压缩输出格式
- 避免过多的全局导入影响编译速度
调试技巧
- 开发环境启用
sourcemap
便于浏览器调试
- 设置
debug: true
查看编译详情
- 使用
verbose: true
排查导入问题