[+] chore(root): Initialise le projet avec une structure de base

Crée la structure de base du projet Symfony, incluant les entités,
services, formulaires, et templates nécessaires pour la gestion des
comptes utilisateurs, la sécurité, et la gestion des mots de passe
oubliés. Ajoute également la configuration pour la gestion des assets
avec Vite, la gestion des fichiers avec Flysystem, et la
génération de sitemaps.
```
This commit is contained in:
Serreau Jovann
2025-12-11 17:22:26 +01:00
parent f9987d525e
commit 662bb0bcc6
89 changed files with 18001 additions and 6950 deletions

96
vite.config.js Normal file
View File

@@ -0,0 +1,96 @@
// vite.config.js
import { defineConfig } from 'vite';
import { resolve } from 'path';
import JavaScriptObfuscator from 'rollup-plugin-javascript-obfuscator';
import tailwindcss from '@tailwindcss/vite'
import viteCompression from 'vite-plugin-compression';
export default defineConfig({
root: './assets',
base: '/assets/',
server: {
host: "0.0.0.0",
allowedHosts: ["esyweb.local"],
port: 5173,
open: false,
cors: {
origin: ['https://esyweb.local']
},
},
resolve: {
alias: {
'@': resolve(__dirname, 'assets'),
},
// Extensions de fichiers à résoudre automatiquement
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.scss', '.css'],
},
build: {
outDir: resolve(__dirname, 'public/build'),
assetsDir: '',
emptyOutDir: true,
manifest: true,
sourcemap: false,
// Minification par défaut : esbuild est déjà très rapide et efficace
minify: 'esbuild',
cssMinify: 'esbuild',
// NOUVEAU : Stratégie de découpage du code pour améliorer le cache client
rollupOptions: {
input: {
app: resolve(__dirname, 'assets/app.js'),
admin: resolve(__dirname, 'assets/admin.js'),
}
},
},
// --- Plugins Vite ---
plugins: [
tailwindcss(),
// NOUVEAU: Ajoutez Preact/React/Vue si vous utilisez ces frameworks
// preact(),
// 1. Compression des Assets (Gzip et Brotli)
// Crée des fichiers .gz et .br à côté des assets originaux.
// Votre serveur web (Nginx/Apache) doit être configuré pour servir ces versions compressées.
viteCompression({
verbose: true,
disable: false,
threshold: 10240, // Compresse seulement les fichiers > 10KB
algorithm: 'gzip',
ext: '.gz',
}),
viteCompression({
verbose: true,
disable: false,
threshold: 10240,
algorithm: 'brotliCompress', // Brotli est plus efficace que Gzip
ext: '.br',
// Ne génère le brotli que si l'algorithme est disponible (par défaut)
deleteOriginFile: false // Important : gardez les fichiers originaux
}),
JavaScriptObfuscator({
// Options recommandées pour un bon équilibre entre sécurité et performance
compact: true,
sourceMap: false,
controlFlowFlattening: true, // Très efficace mais coûteux en performance à l'exécution
deadCodeInjection: false,
debugProtection: false,
identifierNamesGenerator: 'hexadecimal', // Rend le code illisible
log: false,
numbersToExpressions: true,
simplify: true,
splitStrings: true,
stringArray: true,
stringArrayThreshold: 0.75,
transformObjectKeys: true,
unicodeEscapeSequence: false,
}),
],
define: {},
});