2025-06-17 22:37:37 +08:00
|
|
|
|
import type { ConfigEnv, PluginOption } from 'vite';
|
|
|
|
|
|
import path from 'node:path';
|
|
|
|
|
|
import vue from '@vitejs/plugin-vue';
|
2025-08-04 23:11:42 +08:00
|
|
|
|
import { visualizer } from 'rollup-plugin-visualizer';
|
2025-06-17 22:37:37 +08:00
|
|
|
|
import UnoCSS from 'unocss/vite';
|
|
|
|
|
|
import AutoImport from 'unplugin-auto-import/vite';
|
|
|
|
|
|
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
|
2025-08-04 23:11:42 +08:00
|
|
|
|
|
2025-06-17 22:37:37 +08:00
|
|
|
|
import Components from 'unplugin-vue-components/vite';
|
2025-08-04 23:11:42 +08:00
|
|
|
|
import viteCompression from 'vite-plugin-compression';
|
|
|
|
|
|
|
2025-06-17 22:37:37 +08:00
|
|
|
|
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'),
|
2025-08-04 23:11:42 +08:00
|
|
|
|
|
|
|
|
|
|
// ✅ 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,
|
|
|
|
|
|
}),
|
|
|
|
|
|
|
2025-06-17 22:37:37 +08:00
|
|
|
|
];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default plugins;
|