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

Зависимости блоков

Движок загружает блоки из деклараций зависимостей бандлов (deps): сам находит их файлы .nu.ts и вызывает их без ручного registerBlock. Список блоков бандла задаётся явно; содержимое страницы не обновляет его автоматически.

bemdecl — точка входа

Точка входа зависимостей — файл blocks/<bundle>/<bundle>.bemdecl.js (стандарт БЭМ). Он перечисляет, какие блоки нужны бандлу:

// blocks/docs-layout/docs-layout.bemdecl.js — CommonJS
module.exports = {
    mustDeps: [
        'root',          // Standard document wrapper
        'docs-layout',   // сам каркас
    ],
    shouldDeps: [
        'menu',          // навигация
        'article',       // контент
    ],
};

Файл читается как CommonJS. Запись — строка ('menu') или объект ({ block: 'menu' }); допустим и плоский массив (module.exports = ['root', 'docs-layout', 'menu']), и объект с mustDeps/shouldDeps — оба списка объединяются в один.

Список плоский, без транзитивности

Декларация не обходит вложенные зависимости: если блоку menu нужен button, button тоже записывают в bemdecl бандла. Список читается целиком:

docs-layout.bemdecl.js → root, docs-layout, menu, article, button, icon

Каждый блок загружается из своего .nu.ts. Плоский список проще проверять: что записано — то и попадёт в сборку.

Откуда берутся бандлы

Бандлы перечислены в config/site.json → bundles (по умолчанию список пуст; укажите каждый нужный бандл явно). Для каждого движок читает свой bemdecl и собирает бандлы CSS и JS — подробнее в ассетах на выходе.

CSS и JS по зависимостям

Тот же список определяет бандлы стилей и скриптов. Если блок в зависимостях, его block.css и block.js включаются в бандл страницы.

Декларация как общий список

Декларация — явный список блоков бандла. Она одновременно задаёт шаблоны, CSS и JS; добавление блока в контент не обновляет её автоматически. Файл .deps.js не обходится. Где движок ищет файлы — уровни блоков.

В проекте с "type":"module" добавьте blocks/package.json с {"type":"commonjs"}, чтобы .bemdecl.js оставался CommonJS. Декларация с позднего уровня заменяет декларацию с раннего целиком.