import { defineConfig, type Plugin } from 'vite' import react from '@vitejs/plugin-react' import tailwindcss from '@tailwindcss/vite' import { resolve } from 'node:path' function spaFallback(): Plugin { return { name: 'spa-fallback', configureServer(server) { server.middlewares.use((req, _res, next) => { const url = req.url ?? '' // Skip API proxy, static files, and Vite internals if (url.startsWith('/api') || url.startsWith('/@') || url.startsWith('/node_modules')) { return next() } // If the URL has no file extension, rewrite to index.html if (!/\.\w+$/.test(url.split('?')[0])) { req.url = '/index.html' } next() }) }, } } export default defineConfig({ plugins: [react(), tailwindcss(), spaFallback()], resolve: { alias: { '@': resolve(__dirname, 'src') }, }, server: { proxy: { '/api': { target: 'http://localhost:8000', changeOrigin: true, }, }, }, })