Привет!
Идея
bembundle
в том, что собирается несколько отдельных бандлов: базовый, который загрузится в самом начале и любое количество последующих, догружаемых в тот момент, когда они оказываются действительно нужны. Например, можно заинлайнить в HTML прелоадер иloader_type_bundle
с его зависимостями, моментально отрисовать такую страничку, а всю тяжелую функциональность вытащить отдельным запросом. Либо сразу загрузить основные блоки, которые нужны всегда, а всякие редкие — подтягивать по мере необходимости.Для этого потребуется сначала отдельно задекларировать разные наборы блоков (например, описать их в виде BEMJSON или BEMDECL), а затем собрать их таким образом, чтобы за один запрос к серверу загрузить сразу CSS + JS + шаблоны.
При этом, если мы в базовом бандле загрузим, скажем, форму поиска с
input
иbutton
, а тяжелый попап с настройками, в котором также присутствуютinput
иbutton
захотим загрузить только когда пользователь нажмет на кнопку настроек, нам потребуется механизм, который позволит вычитать зависимости. Кроме того, если у нас окажется несколько загружаемых бандлов, которые включают какую-то часть совпадающих блоков, необходимо обеспечить защиту, от повторного выполнения кода, который уже был выполнен после загрузки предыдущего бандла.За сборку всего этого дела отвечает пакет enb-bembundle, но проблема в том, что он на данный момент не совместим с
bem-core
(когда-нибудь доберемся его обновить). Пока же можно посмотреть на наскоро накопипащенный код из нашего внутреннего проекта и приспособить под себя (если собрать ветку, будет видно, что изначально CSS на страницу не подключается, а затем его подтягивает загрузчик).Ну а loader_type_bundle, соответственно, умеет такие хитрые бандлы, содержащие сразу и CSS и JS нужных блоков загрузить и вставить в страницу с учетом того, чтобы уже выполнившиеся блоки не выполнялись повторно.
@tadatuta Спасибо! Буду разбираться. Скорее всего будут еще вопросы.
@tadatuta Какова сейчас ситуация с совместимостью с bem-core, что-то поменялось?
Насколько мне известно, никто обновлением не занимался :(
@tadatuta А в чем там проблема с bem-core?
Я уже смутно помню, но (вроде) дело было в том, что исходная технология, собирающая JS-чанки, ничего не знает про модульную систему (
ym
).Т.е. на самом деле механическая работа по миграции модуля сборки с
bem-bl
наbem-core
.