import { fileURLToPath, URL } from 'node:url' import vue from '@vitejs/plugin-vue' import { defineConfig, loadEnv, type PluginOption } from 'vite' import { compression } from 'vite-plugin-compression2' const r = (path: string) => fileURLToPath(new URL(path, import.meta.url)) export default defineConfig(({ mode }) => { const env = loadEnv(mode, '.', '') const isProd = mode === 'production' const plugins: PluginOption[] = [vue()] if (isProd) { plugins.push( compression({ algorithms: ['gzip', 'brotliCompress'], threshold: 1024, }), ) } return { plugins, resolve: { alias: { '@': r('./src'), }, }, server: { host: '0.0.0.0', port: 5174, proxy: { '/api': { target: env.VITE_OPS_API_PROXY_TARGET || 'http://localhost:8090', changeOrigin: true, }, }, }, esbuild: isProd ? { drop: ['console', 'debugger'] } : undefined, build: { target: 'es2022', sourcemap: 'hidden', cssCodeSplit: true, reportCompressedSize: false, rollupOptions: { output: { entryFileNames: 'assets/js/[name]-[hash].js', chunkFileNames: 'assets/js/[name]-[hash].js', assetFileNames: 'assets/[name]-[hash][extname]', manualChunks(id) { if (!id.includes('node_modules')) return undefined if (id.includes('/ant-design-vue/') || id.includes('/@ant-design/')) { return 'antd' } if ( id.includes('/vue/') || id.includes('/@vue/') || id.includes('/vue-router/') || id.includes('/pinia/') ) { return 'vue-vendor' } return 'vendor' }, }, }, }, } })