Тема в принципе широкая, и может ее уже обсуждают и обсуждали не раз.
Если структура БЭМ очень даже подходит как обновляемая база знаний, то как ее можно связать с другими аналогами на этом поле типа npm или bower?
Есть ли уже в задумках какой либо пакетный менеджер, или интеграция продумана как-то из коробки?
Суть том, что концепция и принцип сборки БЭМ тулзами мне очень нравится.
Но каждый раз испытываю боль и трепет кода понимаю, что нет легкости в проецировании сторонних библиотек на текущую БЭМ структуру - того, что уже тобой наработано.
Для примера: "Как подключать чужие плагины jquery?"
Можно ли объеденить разные библиотеки в одну сборку "без боли", например из вот такой струкутры
extjs/ - extjs Либа с css картинками и js
jquery-plagins/ - те же плюшки только боком
bem/ - мои наработки
output/ - выход.
я не уверен, что правильно понял вопрос, отвечу наугад и буду рад уточняющим вопросам.
1. bem-tools использует и npm и bower для установки зависимостей.
при этом npm не подходит для установки клиентский зависимостей, т.к. браузерный рантайм не предполагает скоупинга и при пересечении версий одной и той же библиотеки состояние окажется неопределенным (для node.js такая ситуация — норма и все будет работать хорошо).
так что библиотеки блоков логично ставить через bower, а нодовые депенды — через npm. но коль скоро библиотеки блоков могут использовать технологии, отличные от базовых, идущих в комплекте с bem-tools, то они тоже могут иметь свои npm-зависимости.
для того, чтобы автоматически ставить npm-зависимости для библиотек блоков, устанавливаемых через bower, мы написали https://npmjs.org/package/bower-npm-install
2. собирать «внешние» зависимости с помощью bem-tools можно множеством способов, перечислю несколько на примере все того же плагина для jquery, а дальше можно додумывать свои:
а) ставим плагин в папку jquery/__имя-плагина/имя-плагина.js и декларируем элемент jquery__имя-плагина в зависимостях тех блоков, которые используют этот плагин. так сделано сейчас в bem-bl: https://github.com/bem/be
б) ставим jquery-плагины с помощью bower в bower-components (или любую другую папку) и подключаем их через borschik-инклюд: /*borschik:include:path/to/jquery-plugin.js*/
в) используем симлинки
3. для получения произвольной структуры по результатам сборки, можно воспользоваться, например, grunt-ом, который вызывать в цепочке после завершения bem make.