import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import path from 'path' // https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], base: './', build: { outDir: 'dist', emptyOutDir: true, sourcemap: true, cssCodeSplit: true, rollupOptions: { output: { manualChunks: { 'vendor-core': ['react', 'react-dom', 'react-router-dom'], 'vendor-xterm': ['@xterm/xterm', '@xterm/addon-fit', '@xterm/addon-search', '@xterm/addon-webgl'], 'vendor-utils': ['zustand', 'lucide-react'], }, chunkFileNames: 'assets/js/[name]-[hash].js', entryFileNames: 'assets/js/[name]-[hash].js', assetFileNames: (assetInfo) => { const info = assetInfo.name || '' if (/\.(png|jpe?g|gif|svg|webp|ico)$/i.test(info)) { return 'assets/images/[name]-[hash][extname]' } if (/\.css$/i.test(info)) { return 'assets/css/[name]-[hash][extname]' } return 'assets/[name]-[hash][extname]' }, }, }, assetsInlineLimit: 4096, }, resolve: { alias: { '@': path.resolve(__dirname, './src'), '@shared': path.resolve(__dirname, './shared'), }, }, server: { port: 5173, strictPort: true, }, optimizeDeps: { include: ['@xterm/xterm', '@xterm/addon-fit', '@xterm/addon-search', '@xterm/addon-webgl', 'react', 'react-dom'], }, })