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 блок получает данные, собранные движком:
page—{ url, title, ... }и другие метаданные из карты сайта.lang— язык текущего таргета.alternates—Map<lang, {url, title, host}>для hreflang.
Блок формирует по этим данным заголовок, метаданные, 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.