Интеграция @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-бандл без необходимости.
Entry /vue отдаёт исходные .ts и .vue — без transpile сборка упадёт.
Файл создаёте сами — в пакете 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.
На сервере загружаем блоки, composable из предыдущего шага передаёт props в компонент.
На сервере загружайте блоки из БД/файла, при отдаче клиенту обогащайте данные для api-select блоков. Перед сохранением сериализуйте без render.component и SSR-кэша.
Экспортируются из @mushket-co/block-builder/vue:
prepareBlocksForDisplay — восстанавливает render из availableBlockTypesenrichBlockForDisplay — обогащение одного блокаseedRepositoryFromBlocks — синхронизация in-memory репозиторияenableViewportBreakpointDetection — пересчёт spacing после гидрацииcanRenderVueBlock — можно ли отрендерить блок как Vue-компонентresolveVueComponentForBlock — резолв Vue-компонента из блока и реестраgetDefaultBreakpoint — имя брейкпоинта по умолчанию для spacingisClient — true в браузереisServer — true при SSRisViewportBreakpointDetectionEnabled — активно ли определение брейкпоинта по viewportresetViewportBreakpointDetection — сброс состояния определения брейкпоинтаprepareBlocksForDisplay и seedRepositoryFromBlocks вызываются внутри компонента автоматически.
Из корня monorepo: npm run example:nuxt3 или npm run example:nuxt4
API компонентов Vue — в разделе Vue3.