6.0 KiB
6.0 KiB
Build Variants - Руководство
Проект поддерживает два режима работы: frontend (без БД) и full (с MongoDB).
Режимы работы
🎨 Frontend Mode (без БД)
- Только статические JSON файлы воронок
- Без админки и редактирования
- Нет загрузки изображений
- Быстрый старт без зависимостей
🚀 Full Mode (с MongoDB)
- Полная функциональность админки
- Редактирование воронок в реальном времени
- Загрузка и хранение изображений
- История изменений
- Требует MongoDB подключение
Команды запуска
Development (разработка)
# Frontend режим (без БД)
npm run dev
# или
npm run dev:frontend
# Full режим (с MongoDB)
npm run dev:full
Build (сборка)
# Frontend режим
npm run build
# или
npm run build:frontend
# Full режим
npm run build:full
Production (продакшн)
# Frontend режим
npm run start
# или
npm run start:frontend
# Full режим
npm run start:full
Как это работает
Скрипт run-with-variant.mjs
Все команды используют скрипт /scripts/run-with-variant.mjs, который:
- Принимает команду и вариант:
node run-with-variant.mjs dev full - Устанавливает environment переменные:
FUNNEL_BUILD_VARIANT=full|frontendNEXT_PUBLIC_FUNNEL_BUILD_VARIANT=full|frontend
- Запускает Next.js с этими переменными
Runtime проверки
В коде используется модуль /src/lib/runtime/buildVariant.ts:
import { IS_FRONTEND_ONLY_BUILD, IS_FULL_SYSTEM_BUILD } from '@/lib/runtime/buildVariant';
// В API endpoints
if (IS_FRONTEND_ONLY_BUILD) {
return NextResponse.json(
{ error: 'Not available in frontend mode' },
{ status: 403 }
);
}
// Для условной логики
if (IS_FULL_SYSTEM_BUILD) {
// Код который работает только с БД
}
Константы
import { BUILD_VARIANTS } from '@/lib/constants';
BUILD_VARIANTS.FRONTEND // 'frontend'
BUILD_VARIANTS.FULL // 'full'
Environment файлы
.env.local (НЕ включать build variant!)
# ❌ НЕ НАДО: NEXT_PUBLIC_FUNNEL_BUILD_VARIANT=full
# Вместо этого используйте команды npm run dev:full / dev:frontend
# MongoDB (нужно только для full режима)
MONGODB_URI=mongodb://localhost:27017/witlab-funnel
# Базовый URL
NEXT_PUBLIC_BASE_URL=http://localhost:3000
Важно: NEXT_PUBLIC_FUNNEL_BUILD_VARIANT НЕ должна быть в .env.local!
Она устанавливается автоматически через команды.
.env.production
# Только для production окружения
NODE_ENV=production
NEXT_PUBLIC_BASE_URL=https://your-domain.com
API Endpoints
Все API endpoints автоматически проверяют режим работы:
/api/images/[filename] - GET, DELETE
- ✅ Full mode: возвращает изображения из MongoDB
- ❌ Frontend mode: 403 Forbidden
/api/images - GET
- ✅ Full mode: список всех изображений
- ❌ Frontend mode: 403 Forbidden
/api/images/upload - POST
- ✅ Full mode: загрузка изображений в MongoDB
- ❌ Frontend mode: 403 Forbidden
/api/funnels/*
- ✅ Full mode: CRUD операции с воронками
- ❌ Frontend mode: 403 Forbidden
Типичные сценарии
Локальная разработка с админкой
# 1. Запустить MongoDB
mongod --dbpath ./data
# 2. Запустить в full режиме
npm run dev:full
# 3. Открыть http://localhost:3000/admin
Локальная разработка без БД
# Просто запустить frontend режим
npm run dev
# Или явно
npm run dev:frontend
Production деплой (frontend only)
# Собрать frontend версию
npm run build:frontend
# Запустить
npm run start:frontend
Production деплой (full stack)
# Установить MONGODB_URI в .env.production
echo "MONGODB_URI=mongodb://..." > .env.production
# Собрать full версию
npm run build:full
# Запустить
npm run start:full
Troubleshooting
Проблема: "Image serving not available"
Причина: Запущен frontend режим, а используется API для изображений
Решение: Перезапустить в full режиме:
npm run dev:full
Проблема: "Cannot connect to MongoDB"
Причина: MongoDB не запущен или неправильный URI
Решение:
- Проверить что MongoDB запущен:
mongosh - Проверить MONGODB_URI в
.env.local - Убедиться что используется
dev:full, неdev
Проблема: Админка не работает
Причина: Запущен frontend режим
Решение:
npm run dev:full
Итоговые рекомендации
✅ DO:
- Использовать команды
npm run dev:full/dev:frontend - Держать
.env.localбезNEXT_PUBLIC_FUNNEL_BUILD_VARIANT - Проверять
IS_FRONTEND_ONLY_BUILDв API endpoints
❌ DON'T:
- Не добавлять
NEXT_PUBLIC_FUNNEL_BUILD_VARIANTв.env.local - Не проверять
process.env.NEXT_PUBLIC_FUNNEL_BUILD_VARIANTнапрямую - Не смешивать логику frontend и full режимов