Только начинаем внедрять, есть вопрос, почему зависимости из BEMJSON создаются автоматически, а в шаблоне -- нет. Есть какая-то идеологическая причина? Или это ограничение сборщика enb текущей версии?
Только начинаем внедрять, есть вопрос, почему зависимости из BEMJSON создаются автоматически, а в шаблоне -- нет. Есть какая-то идеологическая причина? Или это ограничение сборщика enb текущей версии?
ну видимо потому что намайнить декларации из bemjson проще чем из bemhtml шаблонов. @zxqfox как на счет запилить это в bem-sdk ?
майнинг деклараций из bemhtml? можно, но нет гарантий никаких
Сборка предполагает, что сначала формируется список всех необходимых сущностей, а затем на основе этого списка ищутся подходящие файлы. Когда на входе заранее доступен статичный BEMJSON, список нужных сущностей можно получить из него. А шаблоны — это как раз и есть те самые файлы, которые нужно собрать по зависимостям.
Чтобы начать в них заглядывать в поисках зависимостей, нужно сначала как-то узнать, что они в принципе нужны — это первая проблема.
Вторая проблема в том, что в общем случае невозможно достоверно получить все зависимости из шаблонов:
ну кажется можно напилить такую штуку которая будет искать все зависимости от шаблонов по первоначальному списку из
bemjson
но кажется это будет медленнее чем прочитатьdeps.js
и если развлекаться как в примере выше то да можно нарваться на проблемыЕсли зависимости сделаны для bemjson страницы, почему нельзя в блоке иметь локальный bemjson контента блока? У нас SPA, который состоит из многих страниц, иметь весь контент в одном файле index.bemjson.html неудобно. Да и дублирования много.
@o5e2e2 Для решения этой задачи есть BEMTREE: https://github.com/tadatuta/bem-bemtree-static-project-stub/blob/master/README.ru.md
@tadatuta всё-таки непонятно, почему из одного bemjson так удобно сделана сборка зависимостей, а возможности рекурсивно собирать зависимости из статических файлов bemjson для блоков нет. И тогда писать майнинга шаблонов не надо будет. Вообще никакого шаблонизатора для простейших случаев не надо будет.
Если этого нет просто потому, что никому не надо было, насколько сложно это самостоятельно сделать?
подожди а зачем тебе локальный bemjson ? если только для зависимостей то используй
*.deps.js
Вместо того, чтобы иметь 1 файл ({ block: 'header', content: [{ block:'menu'}, {block: 'logo'}] }), нужно писать и поддерживать 2: block('header').content([{ block:'menu'}, {block: 'logo'}]) и ({ shouldDeps: 'menu', 'logo'})
Да, это простейший случай, но в этом простейшем случае находится большинство кода.
Имхо, нужна просто технология, которая сделает из одного файла с bemjson 2 файла: bemhtml.js (или другой шаблон) и deps.js. Либо же, нужен не bemhtml.js, а bemtree.js/priv.js/другое.
@zxqfox Так ведь есть такая технология, только ИМХО она неоправданно ограничена бандлом. Синтаксис BEMJSON вызывает меньше вопросов у нубов, чем BEMHTML.
Не, такой нет ;-) Та, что есть — это сборка css/js/шаблонов из bemdecl, и bemdecl из bemjson. А тут автогенерация шаблона из bemjson-like файла (шаблона, который будет подклеивать в контент блока содержимое из файла, еяпп) и автогенерацию deps.js, а уже потом запуск обычной сборки.
Но твой кейс понятен.