UnicoreCMS

Границы

Что ломает загрузку модуля или сборку фронта

Правила ниже проверяются автоматически: нарушение видно сразу, а не через месяц в проде.

Пространства имён

id модуля задаёт префиксы для таблиц, настроек, прав, строк и маршрутов. Модуль, который лезет за свои префиксы, не загружается — причина пишется в лог и показывается на странице «Модули». Так удаление модуля остаётся чистым: ядро знает, что именно ему принадлежит.

Имена компонентов

Компонент без префикса роняет сборку

components/Button.vue в слое молча перекрыл бы Button из PrimeVue во всём приложении — не только на страницах модуля. Поэтому componentPrefix обязателен, а совпадение имени с компонентом PrimeVue или ядра останавливает сборку с явным сообщением.

Компоненты PrimeVue

В сборку попадают только те компоненты PrimeVue, которые действительно используются: перед сборкой шаблоны ядра и всех подключённых слоёв сканируются, найденное подтягивается вместе с внутренними зависимостями. Компонент, который подставляется строкой (<component :is="'Select'" />), так не находится — пишите обычный тег.

Слоты и места навигации

Неизвестное имя слота или места ядро сообщает в консоли при регистрации модуля. Опечатка не превращается в молча пустой экран.

Компонент в слот передаётся импортом, а не именем: строка резолвится только для компонентов, объявленных в слое с global: true, и на собранном фронте даёт пустое место без единой ошибки.

Зависимости

Модулям нельзя объявлять зависимости, которые уже есть у сервера. При nodeLinker: hoisted чужая версия общего пакета поднимется в корень и сломает ядро: два экземпляра @nestjs/common или typeorm в одном процессе не живут.

Если пакет нужен и он уже есть у ядра — просто импортируйте, резолв найдёт корневой.

Guard'ы и валидация

Глобальные гварды закрывают все маршруты, включая маршруты модулей: публичной ручке нужен @Public(). Глобальный ValidationPipe({ whitelist: true }) вырезает поля, не описанные через class-validator, — опишите DTO целиком, иначе значения не дойдут до обработчика.

Что расширение не может

Хотелось быПочему нельзя
Переключать тему в рантаймеСлои Nuxt резолвятся на сборке; после смены темы фронт пересобирается
Подменить страницу ядра из модуляПодмена страниц — работа темы, у модуля свои страницы внутри /mod/<id>
Импортировать код сервера напрямуюЯдро поставляется собранным и обфусцированным, исходников в поставке нет
Обойтись без перезапуска сервераNest строит граф зависимостей один раз при старте

Содержание