一、项目环境 (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
排查导入问题