diff --git a/ordinis-admin-ui/vite.config.ts b/ordinis-admin-ui/vite.config.ts index a0cd96f..9108311 100644 --- a/ordinis-admin-ui/vite.config.ts +++ b/ordinis-admin-ui/vite.config.ts @@ -25,4 +25,50 @@ export default defineConfig({ }, }, }, + build: { + chunkSizeWarningLimit: 600, + rollupOptions: { + output: { + // Группировка по принципу: что меняется редко → отдельный chunk → + // браузер кэширует надолго. Что меняется часто (наш код) — в main. + manualChunks: (id) => { + if (!id.includes('node_modules')) return undefined + + // React core — стабильный, основа всего + if (id.match(/node_modules\/(react|react-dom|scheduler)\//)) return 'vendor-react' + + // TanStack — Router + Query, крупные но стабильные + if (id.includes('node_modules/@tanstack/')) return 'vendor-tanstack' + + // @nstart/ui — самый тяжёлый: brand stickers/animations + tons of UI + // (проверяй динамически: lottie, echarts если есть, motion) + if (id.includes('node_modules/@nstart/ui')) return 'vendor-nstart-ui' + + // Иконки — отдельно, ленивая загрузка эффективна + if (id.includes('node_modules/@phosphor-icons/')) return 'vendor-icons' + + // Формы + JSON Schema валидация + if (id.match(/node_modules\/(react-hook-form|@hookform|ajv|ajv-formats)\//)) { + return 'vendor-forms' + } + + // OIDC / auth + if (id.match(/node_modules\/(oidc-client-ts|react-oidc-context)\//)) { + return 'vendor-auth' + } + + // i18next — отдельно + if (id.match(/node_modules\/(i18next|react-i18next|i18next-browser-languagedetector)\//)) { + return 'vendor-i18n' + } + + // Axios + парсеры + if (id.match(/node_modules\/(axios|jose|crypto-js)\//)) return 'vendor-net' + + // Остальное — в общий vendor (не должно быть много) + return 'vendor-misc' + }, + }, + }, + }, })