bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Зависимости BEMHTML #1134

Open o5e2e2 opened 7 years ago

o5e2e2 commented 7 years ago

Только начинаем внедрять, есть вопрос, почему зависимости из BEMJSON создаются автоматически, а в шаблоне -- нет. Есть какая-то идеологическая причина? Или это ограничение сборщика enb текущей версии?

Yeti-or commented 7 years ago

ну видимо потому что намайнить декларации из bemjson проще чем из bemhtml шаблонов. @zxqfox как на счет запилить это в bem-sdk ?

qfox commented 7 years ago

майнинг деклараций из bemhtml? можно, но нет гарантий никаких

tadatuta commented 7 years ago

Сборка предполагает, что сначала формируется список всех необходимых сущностей, а затем на основе этого списка ищутся подходящие файлы. Когда на входе заранее доступен статичный BEMJSON, список нужных сущностей можно получить из него. А шаблоны — это как раз и есть те самые файлы, которые нужно собрать по зависимостям.

Чтобы начать в них заглядывать в поисках зависимостей, нужно сначала как-то узнать, что они в принципе нужны — это первая проблема.

Вторая проблема в том, что в общем случае невозможно достоверно получить все зависимости из шаблонов:

block('b1').content()(function() {
    var prefix = 'b-',
        block = prfix + 'blah';

    return [1,2,3].map(function(i) {
        var entity = {};
        entity = block;
        entity.mods = { level: i };
    });
});
Yeti-or commented 7 years ago

ну кажется можно напилить такую штуку которая будет искать все зависимости от шаблонов по первоначальному списку из bemjson но кажется это будет медленнее чем прочитать deps.js и если развлекаться как в примере выше то да можно нарваться на проблемы

o5e2e2 commented 7 years ago

Если зависимости сделаны для bemjson страницы, почему нельзя в блоке иметь локальный bemjson контента блока? У нас SPA, который состоит из многих страниц, иметь весь контент в одном файле index.bemjson.html неудобно. Да и дублирования много.

tadatuta commented 7 years ago

@o5e2e2 Для решения этой задачи есть BEMTREE: https://github.com/tadatuta/bem-bemtree-static-project-stub/blob/master/README.ru.md

o5e2e2 commented 7 years ago

@tadatuta всё-таки непонятно, почему из одного bemjson так удобно сделана сборка зависимостей, а возможности рекурсивно собирать зависимости из статических файлов bemjson для блоков нет. И тогда писать майнинга шаблонов не надо будет. Вообще никакого шаблонизатора для простейших случаев не надо будет.

Если этого нет просто потому, что никому не надо было, насколько сложно это самостоятельно сделать?

Yeti-or commented 7 years ago

подожди а зачем тебе локальный bemjson ? если только для зависимостей то используй *.deps.js

o5e2e2 commented 7 years ago

Вместо того, чтобы иметь 1 файл ({ block: 'header', content: [{ block:'menu'}, {block: 'logo'}] }), нужно писать и поддерживать 2: block('header').content([{ block:'menu'}, {block: 'logo'}]) и ({ shouldDeps: 'menu', 'logo'})

Да, это простейший случай, но в этом простейшем случае находится большинство кода.

qfox commented 7 years ago

Имхо, нужна просто технология, которая сделает из одного файла с bemjson 2 файла: bemhtml.js (или другой шаблон) и deps.js. Либо же, нужен не bemhtml.js, а bemtree.js/priv.js/другое.

o5e2e2 commented 7 years ago

@zxqfox Так ведь есть такая технология, только ИМХО она неоправданно ограничена бандлом. Синтаксис BEMJSON вызывает меньше вопросов у нубов, чем BEMHTML.

qfox commented 7 years ago

Не, такой нет ;-) Та, что есть — это сборка css/js/шаблонов из bemdecl, и bemdecl из bemjson. А тут автогенерация шаблона из bemjson-like файла (шаблона, который будет подклеивать в контент блока содержимое из файла, еяпп) и автогенерацию deps.js, а уже потом запуск обычной сборки.

Но твой кейс понятен.