Структура проекта и технологический стек

Предварительные требования

Перед чтением этой страницы убедитесь, что вы запустили свой первый Portal, как описано в Быстрый старт AI Portal.

Большую часть повседневной разработки можно оставить ИИ. И всё же знание структуры шаблона позволяет понять, положил ли ИИ свой код в нужное место, и упрощает поиск причин проблем.

Технологический стек

Шаблон Portal основан на @nocobase/portal-template-default, исходный код — в nocobase/portal-template-default.

ТехнологияНазначение
React 19 + TypeScriptФронтенд-фреймворк
ViteСервер разработки и инструмент сборки
RefineФреймворк слоя данных: ресурсы, маршрутизация, формы и права доступа
Tailwind CSS 4Стилизация
shadcn/uiБаза компонентов, исходный код принадлежит проекту
lucideБиблиотека иконок
pnpmМенеджер пакетов

Эта комбинация — тот фронтенд-стек, с которым ИИ сегодня знаком лучше всего, поэтому он пишет для него точнее.

Пока Portal — это чисто фронтенд-проект, а бизнес-логика решается через API NocoBase, стандартные компоненты и тому подобное. Поддержка написания бэкенд-кода Portal силами ИИ агента появится позже.

Структура каталогов

src/
├── app/            Маршрутизация и загрузка расширений
├── pages/          Вход, регистрация, восстановление пароля и т. п.
├── components/     Компоненты
│   ├── ui/         База компонентов shadcn/ui
│   ├── app-shell/  Макет, навигация, состояния загрузки
│   ├── auth/       Компоненты аутентификации
│   └── ...
├── extensions/     Расширения, работают сразу после установки
├── lib/            Обёртка клиента NocoBase и логика ACL
├── providers/      Провайдеры Refine
├── hooks/          Собственные хуки
└── locales/        Локализованные строки

Несколько ключевых мест:

  • src/app/routes.tsx — структура маршрутов. Маршруты для вошедших и невошедших пользователей разделены, а маршруты из расширений подключаются автоматически
  • src/app/extensions.tsx — загрузка расширений, через import.meta.glob сканирует src/extensions/*/extension.tsx
  • src/providers/data.ts — data provider для Refine, переводит синтаксис запросов Refine в параметры API NocoBase
  • src/lib/nocobase/client.tsNocoBaseClient, низкоуровневая обёртка, стоящая за каждым запросом
  • src/components/ui/ — более 60 компонентов shadcn/ui, готовых к использованию

Бизнес-страницы обычно живут в src/extensions/, по одному каталогу на функциональный модуль. См. Стандартные компоненты и расширения.

Ключевые файлы

ФайлНазначение
AGENTS.mdСоглашения разработки для ИИ агента. Сюда можно дописать правила своего проекта
components.jsonКонфигурация shadcn/ui: стиль, библиотека иконок и псевдонимы путей
.env / .env.localПеременные окружения, автоматически обновляются командами nb portal dev и deploy
vite.config.tsКонфигурация сборки, включая прокси для API во время разработки

Переменные окружения

ПеременнаяОписание
NOCOBASE_API_URLКорневой адрес REST API NocoBase, обязательно должен заканчиваться на /api. При развёртывании на том же домене обычно /api
NOCOBASE_PORTAL_BASEПубличный путь, по которому смонтирован Portal. / для локальной разработки, реальный путь развёртывания вроде /x/main/ для сборки
NOCOBASE_AUTHENTICATORИмя аутентификатора, по умолчанию basic
NOCOBASE_API_TOKENВременный token для разработки. Не коммитьте реальное значение
API_CLIENT_STORAGE_PREFIXПрефикс хранения token. Если сервер его переопределяет, значение нужно согласовать
API_CLIENT_STORAGE_TYPEСпособ хранения token, по умолчанию localStorage
API_CLIENT_SHARE_TOKENРазделять ли token, по умолчанию false

nb portal dev и nb portal deploy записывают их за вас, так что обычно трогать их не нужно. Последние три требуют согласования только тогда, когда на сервере изменён способ хранения токенов аутентификации.

Во время разработки, если в NOCOBASE_API_URL указан абсолютный адрес, Vite настроит прокси для пересылки запросов — и разбираться с CORS самостоятельно не придётся.

Часто используемые команды

Вот те, что понадобятся в повседневной работе. Установку зависимостей, обновление переменных окружения и сборку CLI берёт на себя:

КомандаНазначение
nb portal listПосмотреть, какие Portal есть у текущего приложения
nb portal info <portal>Узнать путь разработки, путь развёртывания и URL доступа Portal
nb portal create <portal>Создать из шаблона рабочее пространство разработки для нового Portal
nb portal pull <portal>Загрузить удалённый исходный код Portal в локальное рабочее пространство разработки
nb portal dev <portal>Запустить локальный сервер разработки и видеть изменения сразу
nb portal push <portal>Отправить локальные изменения исходного кода на удалённую сторону
nb portal deploy <portal>Собрать и развернуть, чтобы изменения увидели пользователи
nb portal config <portal>Настроить source storage, параметры Git и путь рабочего пространства разработки
nb portal destroy <portal>Удалить запись Portal и развёрнутые файлы

Полные параметры каждой команды см. в Справочнике команд nb portal.

Где находится рабочее пространство разработки

Рабочее пространство разработки Portal создаётся в том каталоге, где вы выполнили nb portal create или nb portal pull:

./<portal>

При создании или загрузке можно указать другое место через --path. Собранные артефакты развёртывания лежат в другом месте — в storage целевого приложения, синхронизируются командой nb portal deploy, и обычно вам с ними работать не приходится.

Если не уверены, где находится рабочее пространство разработки Portal, просто проверьте:

nb portal info main

Связанные ссылки