import { execSync } from 'node:child_process' import { fileURLToPath } from 'node:url' import vue from '@vitejs/plugin-vue' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import { defineConfig, loadEnv } from 'vite' const srcDir = fileURLToPath(new URL('./src', import.meta.url)) function resolveCommitInfo() { try { return execSync('git show -s --format=%cs(%h)', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim() } catch { return 'unknown' } } export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), '') const proxyTarget = env.VUE_APP_PROXY_TARGET || env.VITE_APP_PROXY_TARGET return { base: './', envPrefix: ['VITE_', 'VUE_APP_'], plugins: [ vue(), AutoImport({ dts: './auto-imports.d.ts', resolvers: [ElementPlusResolver()] }), Components({ dts: './components.d.ts', resolvers: [ElementPlusResolver()] }) ], resolve: { alias: { '@': srcDir } }, define: { __APP_VERSION__: JSON.stringify(resolveCommitInfo()) }, server: { port: 8080, proxy: proxyTarget ? { '/api': { target: proxyTarget, changeOrigin: true } } : undefined }, build: { sourcemap: false, rollupOptions: { output: { manualChunks(id) { if (id.includes('/node_modules/vue/') || id.includes('/node_modules/vue-router/') || id.includes('/node_modules/vuex/')) { return 'vue' } if (id.includes('/node_modules/element-plus/') || id.includes('/node_modules/@element-plus/')) { return 'element-plus' } if (id.includes('/node_modules/echarts/')) { return 'echarts' } if (id.includes('/node_modules/hls.js/')) { return 'media' } if (id.includes('/node_modules/')) { return 'vendor' } if (id.includes('/src/views/system/')) { return 'system' } if (id.includes('/src/views/api/')) { return 'api' } } } } } } })