Nuxt (SSR)

Интеграция @mushket-co/block-builder/vue в Nuxt 3/4 с серверным рендерингом контента блоков

Живое SSR-демо для Nuxt нет в интерактивном demo-bb (там Vue 3 и React 18). Запустите готовые проекты из репозитория пакета: examples/nuxt3 и examples/nuxt4 в block-builder/examples.

Установка

Стили подключайте в client-only плагине — CSS не должен попадать в SSR-бандл без необходимости.

nuxt.config

Entry /vue отдаёт исходные .ts и .vue — без transpile сборка упадёт.

Плагин стилей

composables/useBlockBuilder.ts

Файл создаёте сами — в пакете composable нет. Он собирает зависимости для BlockBuilderComponent: use case, типы блоков из block-config, режим редактирования и сохранение на API.

  • blockManagementUseCase — создание, обновление, удаление блоков
  • apiSelectUseCase — нужен для полей api-select (ApiSelectUseCase + FetchHttpClient)
  • availableBlockTypes — конфиг типов для палитры и форм
  • initialBlocks — ref из useAsyncData, стартовые данные страницы
  • isEdit — режим редактора (false — только просмотр)
  • handleSave — колбэк сохранения; вернуть true при успехе

serializeBlocksForStorage — утилита проекта: убирает render.component и base64 перед JSON. Пример — examples/nuxt3/utils/serializeBlocks.ts. Для api-select и кастомных полей в примере также подключают ApiSelectUseCase и CustomFieldRendererRegistry.

Страница с SSR

На сервере загружаем блоки, composable из предыдущего шага передаёт props в компонент.

API и сохранение

На сервере загружайте блоки из БД/файла, при отдаче клиенту обогащайте данные для api-select блоков. Перед сохранением сериализуйте без render.component и SSR-кэша.

SSR-утилиты

Экспортируются из @mushket-co/block-builder/vue:

  • prepareBlocksForDisplay — восстанавливает render из availableBlockTypes
  • enrichBlockForDisplay — обогащение одного блока
  • seedRepositoryFromBlocks — синхронизация in-memory репозитория
  • enableViewportBreakpointDetection — пересчёт spacing после гидрации
  • canRenderVueBlock — можно ли отрендерить блок как Vue-компонент
  • resolveVueComponentForBlock — резолв Vue-компонента из блока и реестра
  • getDefaultBreakpoint — имя брейкпоинта по умолчанию для spacing
  • isClient — true в браузере
  • isServer — true при SSR
  • isViewportBreakpointDetectionEnabled — активно ли определение брейкпоинта по viewport
  • resetViewportBreakpointDetection — сброс состояния определения брейкпоинта

prepareBlocksForDisplay и seedRepositoryFromBlocks вызываются внутри компонента автоматически.

Живые примеры в репозитории

Из корня monorepo: npm run example:nuxt3 или npm run example:nuxt4

API компонентов Vue — в разделе Vue3.