vite详细打包配置,包含性能优化、资源处理...

时间:2025-04-24 08:41:32
import { defineConfig, loadEnv } from 'vite' import vue from '@vitejs/plugin-vue' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { visualizer } from 'rollup-plugin-visualizer' import legacy from '@vitejs/plugin-legacy' import { terser } from 'rollup-plugin-terser' // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { // 环境变量加载 const env = loadEnv(mode, process.cwd()) return { plugins: [ vue(), AutoImport({ resolvers: [ElementPlusResolver()], dts: 'src/types/auto-imports.d.ts' // 自动导入类型声明 }), Components({ resolvers: [ElementPlusResolver()], dts: 'src/types/components.d.ts' // 组件类型声明 }), // 打包分析插件(仅生产环境) mode === 'production' && visualizer({ open: true, gzipSize: true, brotliSize: true }), // 浏览器兼容插件 legacy({ targets: ['defaults', 'not IE 11'] }) ], // 构建配置 build: { target: 'es2015', // 编译目标 outDir: 'dist', // 输出目录 assetsDir: 'assets', // 静态资源目录 sourcemap: env.VITE_SOURCEMAP === 'true', // 按需开启 minify: 'terser', // 压缩方式 cssCodeSplit: true, // CSS代码分割 // Rollup配置 rollupOptions: { output: { // 代码分割策略 manualChunks(id) { if (id.includes('node_modules')) { return 'vendor' } if (id.includes('src/router')) { return 'router' } }, // 文件命名规则 chunkFileNames: 'js/[name]-[hash].js', entryFileNames: 'js/[name]-[hash].js', assetFileNames: 'assets/[ext]/[name]-[hash][extname]' }, // 外部依赖排除(如有需要) external: ['some-cdn-library'] }, // Terser压缩配置 terserOptions: { compress: { drop_console: true, // 移除console drop_debugger: true // 移除debugger }, format: { comments: false // 移除注释 } } }, // 开发服务器配置 server: { port: 5173, // 开发端口 open: true // 自动打开浏览器 }, // 路径别名配置 resolve: { alias: { '@': '/src', '#': '/types' } }, // CSS预处理器配置 css: { preprocessorOptions: { scss: { additionalData: `@use "@/styles/variables.scss" as *;` } } } } })