Vite + React
Как устроен фронтенд @lowcode/builder-web: сборка, разработка, горячая перезагрузка и структура проекта.
🎯 Зачем эта страница
Цель — объяснить:
- почему для builder-web используется Vite;
- как работает быстрый dev-сервер и HMR;
- что делает React в этом проекте;
- как устроены основные директории builder-web;
- как запускается приложение локально и как оно интегрируется с API.
1. Что такое Vite
Vite — современный инструмент сборки фронтенда, который использует:
- нативные ES-модули в dev-режиме;
- esbuild для сверхбыстрой предварительной обработки;
- Rollup для продакшн-билда.
Основные преимущества:
- ⚡ Молниеносный старт dev-сервера (даже в больших проектах);
- 🔥 Быстрый Hot Module Replacement (моментальная перезагрузка страницы);
- 📦 Простой, предсказуемый build на Rollup;
- 🧩 Легко расширяется плагинами (например, для React).
2. Что делает React
React используется как движок интерфейса для визуального конструктора builder-web:
- отрисовка UI через компоненты;
- управление состоянием (обычно через React hooks);
- рендеринг DSL-структуры в визуальное представление.
Builder-web — это SPA (Single Page Application), которое рендерится полностью на клиенте.
3. Минимальный пример Vite + React
Простейшее приложение может выглядеть так:
// src/main.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>,
);
Конфигурация проекта:
// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
});
Запуск:
pnpm dev
Vite поднимет сервер на http://localhost:5173.
4. Как Vite используется в @lowcode/builder-web
4.1. Основная структура
Примерная структура модуля:
apps/builder-web/
src/
api/ ← клиент для общения с @lowcode/api
components/ ← UI-компоненты
editor/ ← логика визуального редактора
preview/ ← механизм выполнения DSL-приложения
pages/ ← страницы SPA
main.tsx ← точка входа
vite.config.ts ← конфигурация сборки
index.html ← HTML-шаблон для приложения
4.2. Главный поток данных в builder-web
Пользователь → React-компоненты → состояние редактора → API-запросы → сохранение проекта
4.3. Интеграция с API
Vite позволяет задавать прокси для dev-сервера. Это используется, чтобы builder-web мог обращаться к backend без CORS:
export default defineConfig({
server: {
proxy: {
'/api': 'http://localhost:3001', // API-сервер @lowcode/api
},
},
});
Теперь любой запрос вида:
fetch("/api/projects")
будет автоматически проксироваться на бекенд.
5. Как устроен dev-режим
Когда ты запускаешь:
pnpm --filter @lowcode/builder-web dev
происходит следующее:
- Vite запускает свой HTTP-сервер;
- обрабатывает только изменённые файлы через esbuild;
- React компоненты обновляются без перезагрузки страницы благодаря HMR;
- API-запросы уходят на backend через прокси.
В итоге разработка интерфейса получается максимально быстрой.
6. Продакшн-сборка
Команда:
pnpm build
создаёт папку dist/, в которой лежит готовый бандл.
Сборка использует Rollup:
- дерево модулей оптимизируется;
- CSS объединяется;
- импортированные изображения минифицируются.
7. Где искать ключевые файлы builder-web
| Компонент | Путь | Описание |
|---|---|---|
| Vite config | apps/builder-web/vite.config.ts | Настройки dev-сервера и сборки |
| Точка входа | apps/builder-web/src/main.tsx | Инициализация React-приложения |
| HTML-шаблон | apps/builder-web/index.html | Корневой HTML для SPA |
| API-клиент | apps/builder-web/src/api/* | Работа с backend |
| Логика редактора | apps/builder-web/src/editor/* | Обработка DSL, drag-n-drop и т.п. |
| Превью DSL-приложений | apps/builder-web/src/preview/* | Выполнение DSL-бандлов |
8. Что нужно знать разработчику
Для комфортной работы с builder-web достаточно понимать:
- основы React (компоненты, состояние, props);
- основные принципы Vite (dev-server, HMR, proxy, build);
- структуру
src/; - базовый принцип общения с backend через API-клиент.
Всё остальное — уже внутренняя логика редактора, и она описывается в других разделах документации.