bem-site / bem-forum-content-ru

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

Пространства имен #1068

Closed melihovv closed 3 years ago

melihovv commented 8 years ago

Если в lib1 и в lib2 есть блок с одним и тем же названием button, есть ли способ у себя на проекте использовать блоки из обеих библиотек? Например, lib1/button и lib2/button. Такой вопрос уже задавали здесь https://ru.bem.info/forum/-234/, но ответов я не увидел.

a-x- commented 8 years ago

Со стилями будут проблемы. Из коробки это не разруливается.

Можно добавить в сборку добавление какого-нибудь префикса к классам

tadatuta commented 8 years ago

@melihovv теоретически, если дописать правильный bem-mv, то можно договориться до специальной декларации подключения библиотек lib-decl.js, где будет что-то типа (фантазирую, ничего такого в природе не существует):

module.exports = {
    lib: 'lib1',
    levels: ['common.blocks', 'desktop.blocks'],
    entities: [
        { block: 'button', as: 'lib2-button' },
        // ...
    ]
}

и тогда на момент установки библиотеки тул проитерируется по этой декларации и позовет libDecl.entities.forEach(entity => bemMv(entity.block, entity.as)).

Но по факту написать такой bem-mv весьма нетривиально, т.к. мало просто переименовать все файлы блока и поправить все вхождения в файлах блока во всех технологиях. Потребуется еще во всех остальных файлах данной библиотеки переименовать все упоминания данного блока в разных технологиях.

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

block('b' + ['l', 'o', 'c'].join('') + 'k')();