📋 配置文件基础 >>>
📝 配置文件命名
vite.config.ts
vite.config.mjs
vite.config.cjs
⚙️ 指定配置文件
vite --config my-config.js
🏗️ 基础配置结构
export default {
}
💡 Vite 支持多种配置文件格式,推荐使用 TypeScript 配置文件获得类型提示
🧠 配置智能提示 >>>
📖 JSDoc 类型提示
export default {
}
🔧 defineConfig 助手函数
import { defineConfig } from 'vite'
export default defineConfig({
})
📘 TypeScript 配置文件
import type { UserConfig } from 'vite'
export default {
} satisfies UserConfig
💡 使用 defineConfig 可以获得完整的类型提示和验证
🔄 条件配置 >>>
🎯 基于命令的条件配置
export default defineConfig(({ command, mode, isSsrBuild, isPreview }) => {
if (command === 'serve') {
return {
server: {
port: 3000
}
}
} else {
return {
build: {
minify: 'terser'
}
}
}
})
🎭 常用条件判断
export default defineConfig(({ command, mode, isSsrBuild, isPreview }) => {
return {
devOnly: command === 'serve',
prodBuild: command === 'build' && mode === 'production',
ssr: isSsrBuild,
preview: isPreview
}
})
💡 条件配置允许根据不同的构建环境动态调整配置
⚡ 异步配置 >>>
🚀 异步函数配置
export default defineConfig(async ({ command, mode }) => {
const data = await asyncFunction()
return {
define: {
__ASYNC_DATA__: JSON.stringify(data)
}
}
})
💡 异步配置适用于需要从外部数据源加载配置的场景
🌍 环境变量使用 >>>
📂 加载环境变量
import { defineConfig, loadEnv } from 'vite'
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '')
return {
define: {
__APP_ENV__: JSON.stringify(env.APP_ENV),
},
server: {
port: env.APP_PORT ? Number(env.APP_PORT) : 5173,
},
}
})
🎯 环境变量作用域
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '')
const viteEnv = loadEnv(mode, process.cwd())
return {
}
})
📋 环境变量文件优先级
.env
.env.local
.env.[mode]
.env.[mode].local
💡 客户端只能访问以 VITE_ 开头的环境变量
⚙️ 核心配置选项 >>>
📁 项目配置
export default defineConfig({
root: './src',
envDir: './env',
base: '/my-app/',
mode: 'development',
configFile: 'my-vite.config.js',
})
🌐 服务器配置
export default defineConfig({
server: {
port: 5173,
open: true,
cors: true,
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true,
rewrite: (path) => path.replace(/^/////////api, '')
}
}
}
})
💡 代理配置特别适合解决开发环境跨域问题
🔨 构建配置 >>>
📦 构建选项
export default defineConfig({
build: {
outDir: 'dist',
assetsDir: 'assets',
minify: 'terser',
sourcemap: true,
target: 'es2015',
rollupOptions: {
output: {
manualChunks: {
vendor: ['vue', 'vue-router']
}
}
}
}
})
🎯 构建优化
export default defineConfig({
build: {
chunkSizeWarningLimit: 1000,
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes('node_modules')) {
return 'vendor'
}
}
}
},
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true
}
}
}
})
💡 合理的代码分割可以显著提升应用加载性能
🔌 插件配置 >>>
🧩 基础插件使用
import vue from '@vitejs/plugin-vue'
import react from '@vitejs/plugin-react'
import { resolve } from 'path'
export default defineConfig({
plugins: [
vue(),
react()
]
})
🛠️ 自定义插件
export default defineConfig({
plugins: [
vue(),
{
name: 'my-plugin',
configureServer(server) {
server.middlewares.use((req, res, next) => {
next()
})
}
}
]
})
💡 Vite 插件系统基于 Rollup,扩展性强
🔗 路径别名 >>>
📍 基础别名配置
import { resolve } from 'path'
export default defineConfig({
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
'@components': resolve(__dirname, 'src/components'),
'@utils': resolve(__dirname, 'src/utils')
}
}
})
🎯 正则表达式别名
export default defineConfig({
resolve: {
alias: [
{
find: /^@components/,
replacement: resolve(__dirname, 'src/components')
}
]
}
})
💡 路径别名可以简化导入路径,提高代码可维护性
🎨 CSS 配置 >>>
🖌️ 预处理器配置
export default defineConfig({
css: {
preprocessorOptions: {
scss: {
additionalData: '@import "@/styles/variables.scss";'
},
sass: {
additionalData: '@use "@/styles/variables" as *;'
},
less: {
javascriptEnabled: true
}
}
}
})
🔧 PostCSS 配置
export default defineConfig({
css: {
postcss: {
plugins: [
require('autoprefixer'),
require('tailwindcss'),
require('postcss-nested')
]
}
}
})
🎯 CSS 模块化
export default defineConfig({
css: {
modules: {
localsConvention: 'camelCaseOnly'
}
}
})
💡 CSS 模块化可以帮助避免样式命名冲突
⚡ 依赖优化 >>>
📦 预构建配置
export default defineConfig({
optimizeDeps: {
include: ['vue', 'vue-router', 'axios'],
exclude: ['@tensorflow/tfjs'],
force: true,
esbuildOptions: {
target: 'es2020'
}
}
})
🚀 开发性能优化
export default defineConfig({
server: {
fs: {
strict: false
},
hmr: {
overlay: true
}
},
optimizeDeps: {
force: true,
include: ['vue', 'vue-router']
}
})
💡 合理的依赖优化可以显著提升开发服务器启动速度
📋 常用配置模板 >>>
⚛️ Vue 3 项目
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
},
server: {
port: 3000,
open: true
},
build: {
outDir: 'dist',
assetsDir: 'assets',
sourcemap: false
}
})
⚛️ React 项目
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
server: {
port: 3000,
open: true
},
build: {
outDir: 'build',
sourcemap: true
},
optimizeDeps: {
include: ['react', 'react-dom']
}
})
📘 TypeScript 项目
import { defineConfig } from 'vite'
import { resolve } from 'path'
export default defineConfig({
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
'@types': resolve(__dirname, 'src/types')
}
},
server: {
port: 5173
},
build: {
target: 'esnext',
outDir: 'dist'
}
})
💡 根据项目类型选择合适的配置模板可以快速开始开发
🔧 插件开发 >>>
🛠️ 简单插件示例
export default function myPlugin() {
return {
name: 'my-plugin',
config(config, { command }) {
return {
}
},
configResolved(resolvedConfig) {
},
configureServer(server) {
server.middlewares.use((req, res, next) => {
next()
})
},
transform(code, id) {
if (id.endsWith('.vue')) {
return code.replace(/foo/g, 'bar')
}
}
}
}
🎯 插件钩子说明
{
name: 'plugin-name',
config,
configResolved,
configureServer,
configurePreviewServer,
transformIndexHtml,
transform,
buildStart,
buildEnd,
closeBundle
}
💡 Vite 插件基于 Rollup 插件接口,扩展了特定的开发服务器钩子
🚀 高级配置 >>>
🎯 预览配置
export default defineConfig({
preview: {
port: 4173,
open: true,
host: true
}
})
🔧 实验性功能
export default defineConfig({
experimental: {
buildTarget: 'esnext',
hmrPartialAccept: true
}
})
📊 Worker 配置
export default defineConfig({
worker: {
format: 'es',
plugins: [],
rollupOptions: {}
}
})
💡 高级配置适用于特定需求和性能优化场景