import type { ConfigEnv, PluginOption } from 'vite'; import path from 'node:path'; import vue from '@vitejs/plugin-vue'; import { visualizer } from 'rollup-plugin-visualizer'; import UnoCSS from 'unocss/vite'; import AutoImport from 'unplugin-auto-import/vite'; import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; import Components from 'unplugin-vue-components/vite'; import viteCompression from 'vite-plugin-compression'; import envTyped from 'vite-plugin-env-typed'; import createSvgIcon from './svg-icon'; const root = path.resolve(__dirname, '../../'); function plugins({ mode, command }: ConfigEnv): PluginOption[] { return [ UnoCSS(), envTyped({ mode, envDir: root, envPrefix: 'VITE_', filePath: path.join(root, 'types', 'import_meta.d.ts'), }), vue(), AutoImport({ imports: ['vue'], eslintrc: { enabled: true, }, resolvers: [ElementPlusResolver()], dts: path.join(root, 'types', 'auto-imports.d.ts'), }), Components({ resolvers: [ElementPlusResolver()], dts: path.join(root, 'types', 'components.d.ts'), }), createSvgIcon(command === 'build'), // ✅ Gzip 构建产物压缩(仅生产构建) command === 'build' && viteCompression({ verbose: true, disable: false, threshold: 10240, algorithm: 'gzip', ext: '.gz', }), // ✅ 构建分析图(仅生产构建) command === 'build' && visualizer({ filename: './dist/stats.html', open: false, // 打包后自动打开分析图(true 可开启) gzipSize: true, brotliSize: true, }), ]; } export default plugins;