| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import path from 'node:path';
- import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite';
- import vue from '@vitejs/plugin-vue';
- import vueJsx from '@vitejs/plugin-vue-jsx';
- 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 compressPlugin from 'vite-plugin-compression';
- type Algorithm = 'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw';
- interface Config {
- threshold: number
- filter: (path: string) => boolean
- deleteOriginFile: boolean
- ext?: string
- algorithm?: Algorithm
- }
- // 压缩插件
- const configCompressPlugin = function (compress: string) {
- if (compress === 'none') {
- return null;
- }
- const config: Config = {
- threshold: 10240,
- filter: (file) => {
- return /\.(?:js|css|html|json|xml|svg|wasm|woff|woff2)$/.test(file); // 只压缩指定的文件类型
- },
- deleteOriginFile: false,
- };
- if (compress === 'brotli') {
- config.ext = '.br';
- config.algorithm = 'brotliCompress';
- }
- return compressPlugin(config);
- };
- // 创建 Vite 插件
- export default function createVitePlugins(env: any) {
- return [
- vue(),
- vueJsx(),
- UnoCSS(),
- AutoImport({
- dts: 'src/typings/auto-imports.d.ts',
- imports: ['vue', 'vue-router', 'pinia', '@vueuse/core'],
- resolvers: [ElementPlusResolver()],
- }),
- Components({
- dts: 'src/typings/components.d.ts',
- extensions: ['vue', 'tsx'],
- dirs: ['src/components'],
- resolvers: [ElementPlusResolver()],
- }),
- VueI18nPlugin({
- include: path.resolve(__dirname, '../src/locales/**'),
- }),
- configCompressPlugin(env.VITE_COMPRESSION),
- ];
- }
|