import { defineConfig, loadEnv } from 'vite'; import react from '@vitejs/plugin-react'; // Vite-конфиг студии Рублокса. // // - порт 5174 фиксирован (плеер на 5173, чтобы можно было гонять оба // проекта параллельно на одной машине) // - outDir 'build' (деплоится в nginx /var/www/rublox-studio/build/) // - manualChunks: babylon/monaco/colyseus в отдельные чанки // (movie engine ~46к строк + monaco ~5МБ — без разделения тормозит) // - define для process.env.NODE_ENV — шим для engine-кода // - dev-proxy по умолчанию на staging (dev-api.rublox.pro); // переопределяй через VITE_API_PROXY_TARGET если нужно свой бэкенд. export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), ''); const PROXY_TARGET = env.VITE_API_PROXY_TARGET || 'https://dev-api.rublox.pro'; // Префиксы которые проксируем на бэкенд. // Для prod-target (minecraftia-school.ru) — режем напрямую на S2 IP (85.175.6.22), // т.к. на S1 user-service остался старый JWT_SECRET после ротации 2026-06-04, // и токены выданные S2 на S1 не валидируются. const proxyPrefixes = ['/api-user', '/api-storys', '/api-game']; const isProdTarget = PROXY_TARGET.includes('minecraftia-school.ru'); const proxyOpts = { target: PROXY_TARGET, changeOrigin: true, secure: true, ws: true, }; const proxy = Object.fromEntries(proxyPrefixes.map((p) => [p, proxyOpts])); // /api-rbxl — отдельный target (VM 130 rbxl-importer на S1). // В dev: ходим напрямую через CF DNS (proxied=false → 85.175.7.40 → NPM → VM 130). proxy['/api-rbxl'] = { target: env.VITE_RBXL_PROXY_TARGET || 'http://api-rbxl.rublox.pro', changeOrigin: true, secure: false, rewrite: (path) => path.replace(/^\/api-rbxl/, ''), }; // Вся статика (kubikon-assets, assets, wiki, dev-*.json) лежит в public/ — // vite сама отдаёт. Никаких proxy не нужно. См. setup-public.ps1 если папок нет. return { plugins: [react()], server: { host: '127.0.0.1', port: 5174, strictPort: true, proxy, }, build: { outDir: 'build', sourcemap: false, rollupOptions: { output: { manualChunks: { babylon: ['@babylonjs/core', '@babylonjs/loaders'], monaco: ['@monaco-editor/react'], colyseus: ['colyseus.js'], }, }, }, }, define: { 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'), }, }; });