У нас в проекте используются merged-бандлы.
common
+ specifix-page
Словили баг с отваливающимся инитом. Я нашёл проблему в i-bem__dom_init_auto
, отключил его на уровне проекта и написал свою обёртку для старта (по загрузке всех скриптов).
Первая версия стартера (не работающая как планировалось).
modules.require(
['i-bem__dom_init', 'jquery', 'next-tick'],
function(init, $, nextTick) {
let scripts = $('script')
total = scripts.length,
loaded = 0;
function magicPendel() {
$(function() {
nextTick(init);
});
}
window.pinok = magicPendel;
scripts
.on('load', () => {
++loaded;
if (total === loaded) {
magicPendel();
}
})
.load();
});
Странно, ничего не работало, хоть и вызывалось после загрузки скриптов. Дёргаю ручку pinok
в консоли, а страница мёртвая.
Делаю modules.require('i-bem__dom_init', init => init());
, всё оживает. Понимаю, что где-то замыкание, но что-то не въехал откуда оно происходит (в попытках отследить через дебаггер уже начал путаться).
Рабочий стартер (но скорее всего буду дорабатывать)
modules.require(
['jquery', 'next-tick'],
function($, nextTick) {
let scripts = $('script')
total = scripts.length,
loaded = 0;
function magicPendel() {
$(function() {
modules.require('i-bem__dom_init', (init) => nextTick(init));
});
}
scripts
.on('load', () => {
++loaded;
if (total === loaded) {
magicPendel();
}
})
.load();
});
Наверное, ты вот это не учёл: https://github.com/bem/bem-core/blob/v4/common.blocks/i-bem-dom/i-bem-dom.js#L1126-L1136
@zxqfox видел это место, но что-то не сразу въехал в него (забыл про переопределения :) )... Сейчас ещё раз просмотрел, стало понятно, что выхватывался промежуточный
i-bem-dom_init
из всего стека. Спасибо :)