Зависимости блоков
Движок загружает блоки из деклараций зависимостей бандлов (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. Декларация с позднего уровня заменяет декларацию с раннего целиком.