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 Icons from 'unplugin-icons/vite' import IconsResolver from 'unplugin-icons/resolver' 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(), visualizer({ gzipSize: true, brotliSize: true }) as PluginOption, 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', resolvers: [ IconsResolver(), ], }), Icons({ autoInstall: true, }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, })