Files
Yi.Admin/Yi.Ai.Vue3/.build/plugins/index.ts

64 lines
1.7 KiB
TypeScript
Raw Normal View History

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';
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-06-17 22:37:37 +08:00
import Components from 'unplugin-vue-components/vite';
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'),
// ✅ 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;