riseup-squad18/vite.config.ts

94 lines
2.5 KiB
TypeScript

import react from "@vitejs/plugin-react";
import { defineConfig, UserConfig } from "vite";
import { VitePWA } from "vite-plugin-pwa";
import { copyFileSync, mkdirSync, existsSync } from "fs";
import { join, resolve } from "path";
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
let build: UserConfig["build"],
esbuild: UserConfig["esbuild"],
define: UserConfig["define"];
if (mode === "development") {
build = {
minify: false,
};
esbuild = {
jsxDev: true,
};
define = {
"process.env.NODE_ENV": '"development"',
__DEV__: "true",
};
} else {
// Modo produção - copiar arquivos de dados
build = {
...build,
// Hook após o build para copiar arquivos
rollupOptions: {
output: {
// Melhorar code-splitting em produção
manualChunks(id) {
if (id.includes("node_modules")) {
if (
id.includes("react-router-dom") ||
id.includes("react-router")
)
return "react-router";
if (id.match(/node_modules\\(?:react|react-dom)(?:\\|\/)/))
return "react";
if (id.includes("axios")) return "axios";
if (id.includes("date-fns")) return "date-fns";
if (id.includes("lucide-react")) return "icons";
if (
id.includes("react-toastify") ||
id.includes("react-hot-toast")
)
return "toasts";
if (id.includes("zod")) return "zod";
return "vendor";
}
return undefined;
},
assetFileNames: (assetInfo) => {
// Manter nomes originais para assets
if (assetInfo.name?.endsWith(".json")) {
return "data/[name][extname]";
}
return "assets/[name]-[hash][extname]";
},
},
},
};
}
return {
plugins: [react()],
resolve: {
alias: {
"@": resolve(__dirname, "./src"),
},
},
server: {
proxy: {
"/api/functions": {
target: "https://etblfypcxxtvvuqjkrgd.supabase.co/functions/v1",
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api\/functions/, ""),
},
},
},
build,
esbuild,
define,
optimizeDeps: {
exclude: ["lucide-react"],
},
// Incluir arquivos JSON e PNG (case insensitive) como assets
assetsInclude: ["**/*.json", "**/*.png", "**/*.PNG"],
};
});