import { defineConfig, loadEnv } from "vite";
import react from "@vitejs/plugin-react-swc";
import { VitePWA } from 'vite-plugin-pwa';
import path from "path";
import { componentTagger } from "lovable-tagger";
//import { analyzer } from 'vite-bundle-analyzer';
/*
import { visualizer } from "rollup-plugin-visualizer";
import viteCompression from 'vite-plugin-compression';
const rollupOptions = {
output: {
entryFileNames: 'assets/[name].js',
chunkFileNames: 'assets/[name].js',
assetFileNames: 'assets/[name].[ext]',
manualChunks(id: string) {
if (id.includes('node_modules')) {
if (id.includes('recharts')) {
return 'recharts';
}
return 'vendor';
}
},
},
}
*/
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '');
const proxyTarget = env.VITE_SERVER_IMAGE_API_URL || 'http://localhost:3333';
return {
server: {
host: "::",
port: 8080,
proxy: {
'/api': {
target: proxyTarget,
changeOrigin: true,
}
}
},
plugins: [
react(),
mode === "development" && componentTagger(),
//analyzer({ openAnalyzer: false}),
// viteCompression({ algorithm: 'gzip' }),
VitePWA({
strategies: 'injectManifest',
srcDir: 'src',
filename: 'sw.ts',
registerType: 'autoUpdate',
workbox: {
maximumFileSizeToCacheInBytes: 3000000
},
injectManifest: {
maximumFileSizeToCacheInBytes: 3000000
},
includeAssets: ['favicon.ico', 'apple-touch-icon.png'],
manifest: false,
devOptions: {
enabled: true,
},
}),
{
name: 'async-css',
enforce: 'post',
transformIndexHtml(html: string) {
return html.replace(
/]*?)>/g,
''
);
}
}
].filter(Boolean),
build: {
sourcemap: true
},
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
};
});