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