erp-platform/ui/vite.config.ts
2025-08-13 23:42:18 +03:00

100 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
import dynamicImport from 'vite-plugin-dynamic-import'
import { VitePWA } from 'vite-plugin-pwa'
// import { fetchTenantNames } from './src/services/tenants'
export default defineConfig(async ({ mode }) => {
const env = loadEnv(mode, process.cwd(), '')
const apiUrl = env.VITE_API_URL
const baseDomains = ['sozsoft.com', 'dev.sozsoft.com']
// const tenantNames = (await fetchTenantNames(apiUrl)).map((n) => n.trim().toLowerCase())
// const tenantHosts = tenantNames.map((t) => `${t}.sozsoft.com`)
const tenantHosts: string[] = []
const allowedHosts = Array.from(new Set(['localhost', ...baseDomains, ...tenantHosts]))
console.log('[vite] allowedHosts:', allowedHosts)
return {
plugins: [
react({
babel: {
plugins: ['babel-plugin-macros', '@babel/plugin-syntax-dynamic-import'],
},
}),
dynamicImport(),
VitePWA({
// Deploy'dan sonra otomatik güncelle
registerType: 'autoUpdate',
// Kayıt kodunu otomatik enjekte et (virtual:pwa-register yazmadan da çalışır)
injectRegister: 'auto',
// Dev ortamında SW'yi aç, prod'da kapalı tut (build edilmiş SW prod'da zaten aktif olur)
devOptions: { enabled: mode !== 'production' },
workbox: {
// Büyük asset'leri de cache'leyebil
maximumFileSizeToCacheInBytes: 10 * 1024 * 1024,
// EN KRİTİK: yeni SW beklemeden kontrolü alsın
clientsClaim: true,
skipWaiting: true,
// Eski workbox cache'lerini temizle
cleanupOutdatedCaches: true,
// SPA fallback'i API çağrılarına uygulama
navigateFallbackDenylist: [/^\/api\//],
},
manifest: {
name: 'Platform',
theme_color: '#FF99C8',
background_color: '#f0e7db',
display: 'standalone',
icons: [
{
src: '/img/logo/logo-400.png',
sizes: '400x400',
type: 'image/png',
purpose: 'any',
},
],
},
}),
],
server: {
open: true,
port: 3000,
},
assetsInclude: ['**/*.md'],
resolve: {
alias: {
'@': path.join(__dirname, 'src'),
inferno: 'inferno/dist/index.esm.js',
'devextreme/ui': 'devextreme/esm/ui',
},
},
build: {
outDir: 'dist',
sourcemap: false,
},
preview: {
host: '0.0.0.0',
port: 80,
open: false,
// Hesaplanan allowedHosts'u kullan
allowedHosts,
},
define: {
'process.env': {},
},
}
})