import vue from '@vitejs/plugin-vue'; import { fileURLToPath, URL } from 'node:url'; import { defineConfig, loadEnv } from 'vite'; function manualChunks(id: string) { if (!id.includes('node_modules')) { return undefined; } if (id.includes('/vue/') || id.includes('/vue-router/')) { return 'vendor-vue'; } if (id.includes('/@vueup/vue-quill/') || id.includes('/quill/') || id.includes('/parchment/')) { return 'vendor-editor'; } if ( id.includes('/@ant-design/icons-vue/') || id.includes('/@ant-design/icons-svg/') ) { return 'vendor-antd-icons'; } if (id.includes('/ant-design-vue/')) { return 'vendor-antd'; } if (id.includes('/@ant-design/')) { return 'vendor-antd-core'; } return 'vendor-common'; } export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), ''); const apiTarget = env.VITE_API_TARGET || 'http://127.0.0.1:8000'; return { build: { chunkSizeWarningLimit: 900, rollupOptions: { output: { manualChunks, }, }, }, plugins: [vue()], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, server: { proxy: { '/api': { target: apiTarget, changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, ''), }, }, }, }; });