Files
Yi.Framework/Yi.Ai.Vue3/.build/plugins/index.ts
2026-02-01 00:52:10 +08:00

83 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 fontAwesomePlugin from './fontawesome';
import gitHashPlugin from './git-hash';
import preloadPlugin from './preload';
import createSvgIcon from './svg-icon';
import versionHtmlPlugin from './version-html';
const root = path.resolve(__dirname, '../../');
function plugins({ mode, command }: ConfigEnv): PluginOption[] {
return [
versionHtmlPlugin(), // 最先处理 HTML 版本号
gitHashPlugin(),
preloadPlugin(),
UnoCSS(),
fontAwesomePlugin(),
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(),
// 自动导入 FontAwesomeIcon 组件
(componentName) => {
if (componentName === 'FontAwesomeIcon') {
return {
name: 'FontAwesomeIcon',
from: '@/components/FontAwesomeIcon/index.vue',
};
}
},
],
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;