import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import tailwindcss from '@tailwindcss/vite'; import { resolve } from 'node:path'; export default defineConfig({ root: 'assets', plugins: [react(), tailwindcss()], resolve: { // Les `paths` de tsconfig ne servent qu'à TypeScript : le bundler a // besoin de sa propre déclaration, sinon la compilation passe et le // build échoue — l'ordre le plus déroutant possible. alias: { '@': resolve(import.meta.dirname, 'assets') }, }, build: { // Le front est construit DANS public/, donc servi par FrankenPHP en // même origine que l'API. C'est la condition du choix « cookie de // session » : un front sur un autre domaine imposerait CORS avec // credentials et un cookie SameSite=None, ce qui rouvrirait le CSRF. outDir: resolve(import.meta.dirname, 'public'), // public/ contient déjà index.php et les assets des bundles Symfony : // le vider effacerait le point d'entrée de l'application. emptyOutDir: false, assetsDir: 'build', manifest: false, sourcemap: true, }, server: { port: 5173, // En développement, Vite sert le front et relaie l'API vers FrankenPHP. // Le navigateur ne voit qu'une seule origine : les cookies de session // fonctionnent exactement comme en production. proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: false }, '/delivery': { target: 'http://localhost:8080', changeOrigin: false }, }, }, });