ldc-ovoteam/vite.config.ts

153 lines
4.1 KiB
TypeScript

// 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",
},
],
},
});