153 lines
4.1 KiB
TypeScript
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",
|
|
},
|
|
],
|
|
},
|
|
});
|