import type { PluginOption } from 'vite' import tailwindcss from '@tailwindcss/vite' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' import { fileURLToPath, URL } from 'node:url' import { visualizer } from 'rollup-plugin-visualizer' import AutoImport from 'unplugin-auto-import/vite' import Component from 'unplugin-vue-components/vite' import { defineConfig } from 'vite' import vueDevTools from 'vite-plugin-vue-devtools' import Layouts from 'vite-plugin-vue-layouts' import { VueRouterAutoImports } from 'vue-router/unplugin' import VueRouter from 'vue-router/vite' const RouteGenerateExclude = ['**/components/**', '**/layouts/**', '**/data/**', '**/types/**'] export default defineConfig({ server: { proxy: { '/api': { target: 'http://localhost:5010', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, ''), }, }, }, plugins: [ VueRouter({ exclude: RouteGenerateExclude, dts: 'src/types/route-map.d.ts', }), vue(), vueJsx(), vueDevTools(), tailwindcss(), process.env.ANALYZE ? visualizer({ gzipSize: true, brotliSize: true }) as PluginOption : null, Layouts({ defaultLayout: 'default', }), AutoImport({ include: [ /\.[tj]sx?$/, /\.vue$/, ], imports: [ 'vue', VueRouterAutoImports, ], dirs: [ 'src/composables/**/*.ts', 'src/constants/**/*.ts', 'src/stores/**/*.ts', ], defaultExportByFilename: true, dts: 'src/types/auto-import.d.ts', }), Component({ dirs: [ 'src/components', ], collapseSamePrefixes: true, directoryAsNamespace: true, dts: 'src/types/auto-import-components.d.ts', }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, build: { chunkSizeWarningLimit: 1000, rollupOptions: { output: { manualChunks(id) { if (id.includes('node_modules/.pnpm/vue@') || id.includes('node_modules/.pnpm/vue-router') || id.includes('node_modules/.pnpm/pinia') || id.includes('node_modules/.pnpm/@vueuse')) return 'vue-vendor' if (id.includes('node_modules/.pnpm/radix-vue') || id.includes('node_modules/.pnpm/class-variance-authority') || id.includes('node_modules/.pnpm/clsx') || id.includes('node_modules/.pnpm/tailwind-merge')) return 'ui-vendor' if (id.includes('node_modules/.pnpm/@iconify')) return 'iconify' }, }, }, }, })