import path from "path"; import react from "@vitejs/plugin-react"; import laravel from "laravel-vite-plugin"; import copy from "rollup-plugin-copy"; import { defineConfig } from "vite"; import eslint from "vite-plugin-eslint"; import stylelint from "vite-plugin-stylelint"; import tailwindcss from "@tailwindcss/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: (chunkInfo) => { if (chunkInfo.name === "ssr") return "ssr.js"; return `assets/${debugMode ? "[name]-" : ""}[hash].js`; }, chunkFileNames: `assets/${debugMode ? "[name]-" : ""}[hash].js`, }, }, emptyOutDir: true, sourcemap: debugMode ? "inline" : false, cssTarget: browserTargets, }, plugins: [ laravel({ input: [ "resources/ts/app.tsx", "resources/sass/front/app.scss", // [laravel-files] ], refresh: true, ssr: "resources/ts/ssr.tsx", }), react(), debugMode && stylelint({ dev: false, build: true, cache: true, include: ["**/resources/sass/**/*.{css,scss}"], exclude: ["node_modules/**", "vendor/**", "packages/**"], lintOnStart: false, emitError: true, emitWarning: true, emitErrorAsWarning: false, emitWarningAsError: true, }), debugMode && eslint({ cache: true, include: ["resources/ts/**/*.{ts,tsx}"], exclude: [ "node_modules/**", "**/node_modules/**", "vendor/**", "**/vendor/**", "packages/**", "resources/ts/components/**/*.{ts,tsx}", ], lintOnStart: false, emitWarning: true, emitError: true, failOnWarning: false, failOnError: true, }), copy({ targets: [ { src: path.normalize("resources/favicons/front/*"), dest: path.normalize("public/"), }, // [copy-files] ], copyOnce: true, verbose: true, }), tailwindcss(), ], resolve: { alias: [ { find: "&", replacement: "/resources/assets", }, { find: "@", replacement: "/resources/ts", }, ], }, });