import { defineConfig } from 'vite' import { svelte } from '@sveltejs/vite-plugin-svelte' import path from 'path' /** * Plugin: les fonts restent dans assets/fonts/, sans duplication dans dist/. * Vite les copie dans dist/ pendant le build — ce plugin les supprime du bundle * et réécrit leurs URLs dans le CSS pour pointer vers /assets/fonts/. */ function keepFontsInPlace() { const fontRe = /\.(woff2?|ttf|otf)$/i return { name: 'keep-fonts-in-place', generateBundle(_, bundle) { for (const [key, chunk] of Object.entries(bundle)) { if (fontRe.test(key)) { delete bundle[key] } } for (const chunk of Object.values(bundle)) { if (chunk.type === 'asset' && chunk.fileName.endsWith('.css')) { chunk.source = chunk.source.replace( /url\((['"]?)([^'")\s]*\.(woff2?|ttf|otf))\1\)/gi, (_, _q, p) => `url("/assets/fonts/${p.split('/').pop()}")` ) } } } } } export default defineConfig({ plugins: [ svelte({ configFile: './svelte.config.js' }), keepFontsInPlace(), ], resolve: { alias: { '@components': path.resolve(__dirname, 'src/components'), '@views': path.resolve(__dirname, 'src/views'), '@state': path.resolve(__dirname, 'src/state'), '@router': path.resolve(__dirname, 'src/router'), '@utils': path.resolve(__dirname, 'src/utils'), '@composables': path.resolve(__dirname, 'src/composables') } }, server: { port: 5173, proxy: { '^(?!/@vite|/@fs|/node_modules|/src).*': { target: 'http://localhost:8000', changeOrigin: true } } }, build: { outDir: 'assets/dist', emptyOutDir: true, manifest: false, rollupOptions: { input: 'src/main.js', output: { entryFileNames: 'index.js', chunkFileNames: '[name].js', assetFileNames: '[name].[ext]' } } } })