// eslint-disable-next-line import/no-extraneous-dependencies import basicSsl from "@vitejs/plugin-basic-ssl"; import react from "@vitejs/plugin-react"; import laravel from "laravel-vite-plugin"; import path from "node:path"; // eslint-disable-next-line import/no-extraneous-dependencies import copy from "rollup-plugin-copy"; // eslint-disable-next-line import/no-extraneous-dependencies import autoprefixer from "autoprefixer"; // eslint-disable-next-line import/no-extraneous-dependencies import tailwindcss from "tailwindcss"; // eslint-disable-next-line import/no-extraneous-dependencies import { defineConfig } from "vite"; const debugMode = ["local", "development"].includes(process.env.NODE_ENV ?? ""); const browserTargets = [ "es2019", "edge92", "firefox88", "chrome92", "safari15", ]; export default defineConfig({ build: { chunkSizeWarningLimit: 1500, target: browserTargets, rollupOptions: { output: { entryFileNames: `assets/${debugMode ? "[name]-" : ""}[hash].js`, chunkFileNames: `assets/${debugMode ? "[name]-" : ""}[hash].js`, manualChunks(id) { if (id.includes("node_modules")) { // ! Isole Inertiajs if (id.includes("@inertiajs")) { return "vendor-inertiajs"; } // ! Isole radix-ui if (id.includes("radix-ui") || id.includes("@radix-ui")) { return "vendor-radix-ui"; } // ! Isole Tiptap & ProseMirror (Tiptap relies on ProseMirror) if (id.includes("tiptap") || id.includes("prosemirror")) { return "vendor-tiptap"; } // ! Isole React core if ( id.includes("node_modules/react/") || id.includes("node_modules/react-dom/") ) { return "vendor-react"; } // ! Isole Motion (Framer Motion) if (id.includes("motion")) { return "vendor-motion"; } // ! Isole Icons if (id.includes("lucide-react")) { return "vendor-lucide"; } // ! Isole Swiper if (id.includes("swiper")) { return "vendor-swiper"; } // ! Le reste des node_modules dans un fichier vendor global return "vendor"; } return null; }, }, }, emptyOutDir: true, sourcemap: debugMode ? "inline" : false, cssTarget: browserTargets, }, css: { preprocessorOptions: { scss: { silenceDeprecations: [ "color-functions", "global-builtin", "import", "if-function", ], }, }, devSourcemap: debugMode, postcss: { map: { inline: true }, plugins: [ tailwindcss(), // <-- Add Tailwind here autoprefixer(), { // Hack pour dégager les code css invalid de cookie notice postcssPlugin: "remove-empty-var", Declaration(decl) { if (decl?.value.includes("var()")) { decl.remove(); } }, }, ], }, }, plugins: [ basicSsl(), laravel({ input: [ "resources/ts/app.tsx", "resources/sass/front/app.scss", "resources/sass/back/app.scss", ], refresh: true, }), react(), copy({ targets: [ { src: path.normalize("resources/favicons/front/*"), dest: path.normalize("public/"), }, { src: path.normalize("resources/favicons/back/*"), dest: path.normalize("public/favicon-back"), }, ], copyOnce: true, verbose: true, }), ], resolve: { alias: [ { find: "&", replacement: "/resources/assets", }, { find: "@", replacement: "/resources/ts", }, { find: "$/uwil", replacement: "/resources/ts/front/Components/Theme", }, { find: "$/base", replacement: "/resources/ts/front/Components/Base", }, ], }, });