nuckty
EN
Все разделы →

nuckty-ext-block-root

Обёртка документа HTML — блок root, который оборачивает содержимое в <html>, <head> и <body>. Для сборки нужен обработчик документа; этот пакет предоставляет стандартный обработчик и шаблон root. Потребитель может зарегистрировать собственный обработчик вместо него.

Тип

block и document — добавляет уровень с root и стандартный обработчик документа.

Что делает

Блок root использует режим wrap, чтобы обернуть страницу в документ HTML:

block<{ lang?: string }>('root').wrap((n) => ({
    tag: 'html',
    attrs: { lang: n.props?.lang ?? 'en' },
    content: [
        { tag: 'head', content: [/* meta, title, link */] },
        { tag: 'body', content: n.content ?? null },
    ],
}));

Контракт root и page

Это расширение предоставляет root, внешнюю обёртку. Автор сайта может структурировать её содержимое собственными блоками page*:

  • root — внешний уровень, его даёт это расширение.
  • page, page-index, page-about и подобные — пользовательский слой. Имена page* остаются за сайтом; nuckty их не занимает.

Данные страницы в props

Через n.props блок получает данные, собранные движком:

Блок формирует по этим данным заголовок, метаданные, hreflang и ссылки на стили в <head>. Бандлы JS он подключает с defer после содержимого body.

Установка

Добавьте пакет в ext глобального config/config-nuckty.ts. Он регистрирует обработчик документа; прежде чем подключать пакет, удалите регистрацию другого обработчика.

Команда ниже выполняется из распакованного стартового проекта: готовые архивы расширений находятся в packages/.

npm install ./packages/nuckty-ext-block-root-1.0.0-beta1.tgz

Подключите расширение в config-nuckty.ts:

import { defineNucktyConfig } from 'nuckty';

export default defineNucktyConfig({
    targets: { main: { configDir: 'config/', outDir: 'site/' } },
    ext: ['nuckty-ext-block-root'],
});

И добавьте root в bemdecl бандла страницы (например, blocks/page/page.bemdecl.js) — движок загрузит шаблон по этой записи.

Переопределение

Поместите свой blocks/root/root.nu.ts на более поздний уровень. Движок выберет файл с самого позднего уровня. Так можно задать другую структуру <head>, свои мета-теги или счётчики аналитики, не создавая ответвление расширения.

Регистрация пакета вызывает env.document.register: обработчик создаёт root с DocumentData в props. Ядро не выбирает имя root из sitemap. assets содержит URL бандлов; target.data содержит настройки потребителя.

Стандартный root выводит каждый непустой URL из assets.css и assets.js один раз в порядке добавления; скрипты с defer идут после содержимого страницы. Имена бандлов не выводятся из маршрута. Для выбора бандлов по странице нужен собственный обработчик документа или переопределение root.