Привет! А расскажите, пожалуйста, есть ли общепринятый способ, как избежать конфликтов имен блоков, пришедших из разных источников (от разных вендоров)? Где почитать?
Интуиция подсказывает, что раз есть большие компании, поддерживающие свои библиотеки блоков, наверняка же кто-то предусмотрел, что однажды кому-то понадобится подружить в одном проекте popup из библиотеки Яндекса и popup из библиотеки (условно) Mail.ru.
(поиск по "бэм вендор префикс" внезапно показывать что-то не то =))
Thx!
Добавлю немного конкретики. У нас цмска с модулями. Модули разбиты по вендорам. Например, я - вендор
dubrowsky
, выпускаю модульui
со своими заготовками, и модульmini-shop
, состоящий из какого-то фарша типаproduct
/delivery
/scu
, ну и верстка там какая-то тоже есть.На сервере благодаря такой иерархии у нас более-менее порядок, а в верстке пока бардак - можно называть что угодно как угодно =)
Соответственно, напрашивается решение в виде префикса к имени блока. Префикс должен отражать путь до места, где блок валяется (хотя бы в терминах нашей системы). Соответственно, чтобы можно было из префикса получить путь, разделитель уровней должен отличаться от разделителя слов. Ничего умнее пока не придумал:
Получается жутковато (даже без единого модификатора). Можно сократить до "вендор-модуль", складируя весь фронт-энд в одной папке внутри модуля, но это как бы не сильно спасает.
Я пока в раздумьях на грани когнитивного диссонанса, в том смысле, что большущие Яндексы-Мейлы обходятся без всяких префиксов, а мне зачем-то надо аж два уровня минимум =)
Яндексы и мэйлы обходятся потому что у них большие команды и они используют других вендоров. (На самом деле я не знаю, но почти уверен что так оно и есть)
Быть может, вы
искалихотели написать «не используют»?Конкретно мне и моим знакомым не приходиось притягивать целую коллекцию блоков по БЭМ «написанных не здесь». А если бы пришлось, то это бы решилось переименованием.
Но идея правильная: если есть внешняя библиотка блоков и она обновляется, то хочется её использовать как есть со специально настроенной сборкой.
Есть 3 кейса:
bem-bootstrap
)Не очень понятно что делать, если вендор поставляет не только css но и html (или то, что его производит),
т.к. для css можно сделать плагин для постпроцессора, но библиотеки такого вендора это не поможет.
Часто можно просто ограничится ручным изменением нейминга:
мои фантазии на тему
былоожидание:blocks dubrowsky ui bem-bootstrap ui
сталореальность:blocks dubrowsky-ui vendors bem-bootstrap blocks ui
levels = ['blocks', 'vendors/bem-bootstrap/blocks'];
Если хочешь, можно обсудить как должен работать плагин к постпроцессору css во 2-ом и 3-ем случаях
Ну у меня пока маленькая уютная песочница, где я как скажу, так и будет - то есть мне не надо постпроцессить легаси-код, написанный без префиксов, мне достаточно объявить "теперь пишем с префиксами вот-так-вот, иначе не взлетит" =) Задача-минимум - понять, что это за "вот-так-вот".
То есть надо определиться с синтаксисом для неймспейсов, грубо говоря. Как не размазывать неймспейс по коду - другой вопрос, с препроцессором будет 1 указание на файл, а если добавить магии - можно и снаружи подсовывать.
"Фантазии на тему" че-то не вкурил =( Эти строчки - это где?