Open-source веб-студия для создания игр Рублокса, двойная лицензия AGPL-3.0 + Коммерческая. Главное: - Vite 5 + React 18 + Babylon 7.54.3 + Monaco Editor + Colyseus 0.16 - Самодостаточный движок ~28к строк (66 файлов): BlockManager, TerrainVoxelBuilder, ModelManager, DecoManager, PlayerController, ScriptSandboxWorker, MultiplayerSync, 30+ GD-гейммодов - Главный редактор KubikonEditor (~37к строк) + панели, ScriptEditor (Monaco) - Витрина игр (KubikonFeed, KubikonStudio, KubikonDocs, KubikonLearn) - Geometry Dash sub-app (GdMenu, GdShop, GdRules, GdCoverArt) - 10 admin-preview каталогов для дизайнеров (скины, музыка, порталы и т.д.) - Конфигурируемый бэкенд через VITE_API_BASE — работает со staging (dev-api.rublox.pro) без настройки - Standalone-режим (VITE_STANDALONE=true) — открыть пустой редактор без бэка - Полная документация (на русском): README, ARCHITECTURE, CONTRIBUTING, SECURITY, CHANGELOG - ESLint + Prettier + EditorConfig - Legal: LICENSE (AGPL-3.0), LICENSE-COMMERCIAL.md, CLA.md, COPYRIGHT.md - Issue templates: bug_report, feature_request, security_disclosure Перед публикацией: - Все импорты из minecraftia заменены на локальные - Все хардкоды URL (minecraftia-school.ru) и внутренних IP убраны → env - Admin-эндпоинты Kubikon3DService вырезаны (остаются в приватном репо) - AdminKubikonModeration не публикуется (модерация — в team.rublox.pro) - 93 МБ ассетов public/kubikon-assets вынесены в .gitignore (раздаются через release artifact)
53 lines
1.9 KiB
JavaScript
53 lines
1.9 KiB
JavaScript
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';
|
||
|
||
// Префиксы которые проксируем на бэкенд.
|
||
const proxyPrefixes = ['/api-user', '/api-storys', '/api-game'];
|
||
const proxy = Object.fromEntries(
|
||
proxyPrefixes.map((p) => [
|
||
p,
|
||
{ target: PROXY_TARGET, changeOrigin: true, secure: true, ws: true },
|
||
])
|
||
);
|
||
|
||
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'),
|
||
},
|
||
};
|
||
});
|