w-funnel/BUILD_VARIANTS.md
dev.daminik00 5aea1c8a09 fix
2025-10-01 16:47:04 +02:00

6.0 KiB
Raw Blame History

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, который:

  1. Принимает команду и вариант: node run-with-variant.mjs dev full
  2. Устанавливает environment переменные:
    • FUNNEL_BUILD_VARIANT=full|frontend
    • NEXT_PUBLIC_FUNNEL_BUILD_VARIANT=full|frontend
  3. Запускает 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

Решение:

  1. Проверить что MongoDB запущен: mongosh
  2. Проверить MONGODB_URI в .env.local
  3. Убедиться что используется 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 режимов