Добрый день, весёлая минутка! Здравствуйте.
На новой версии проекта решили использовать БЭМ для работы с шаблонами страниц. Создали репозиторий на основе project-stub. Одновременно хотим вести несколько подпроектов в одном репозитории. Вроде бы, это возможно при использовании разных уровней переопределения, как мне показалось. Столкнулись со следующей проблемой:
- Создаём свой уровень переопределения для страниц:
$ bem create level site.bundles -l .bem/levels/bundles.js
- Получаем папку site.bundles очень похожую на "родную" desktop.bundles: в .bem/levels.js всё идентично "натуральному".
- Создаём блок main в site.bundles:
$ bem create -b main -l site.bundles -T bemjson.js
- В site.bundles/main наблюдаем main.bemjson.js .
- Запускаем сборку:
$ bem make
- Наблюдаем стэктрейс (/opt/markup - расположение нашего репозитория):
TypeError: First argument needs to be a number, array or string.
at new Buffer (buffer.js:188:15)
at Writer.self.write (/opt/markup/node_modules/bem/node_modules/q-io/writer.js:47:23)
at /opt/markup/node_modules/bem/node_modules/q-io/fs-common.js:84:34
at _fulfilled (/opt/markup/node_modules/bem/node_modules/q/q.js:798:54)
at self.promiseDispatch.done (/opt/markup/node_modules/bem/node_modules/q/q.js:827:30)
at Promise.promise.promiseDispatch (/opt/markup/node_modules/bem/node_modules/q/q.js:760:13)
at /opt/markup/node_modules/bem/node_modules/q/q.js:526:49
at flush (/opt/markup/node_modules/bem/node_modules/q/q.js:108:17)
at process._tickCallback (node.js:415:13)
Что-то явно упускаю в настройке, но пока не понимаю отчётливо, что именно. Возможно, новый уровень переопределения надо куда-то также задекларировать? Но куда?
Требуется совет гуру.
Привет, Андрей!
Дело в том, что текущая настройка сборки в
project-stub
написана с оглядкой на возможность разрабатывать одновременно как десктопные, так и тачевые версии проекта. Поэтому в конфиге из текущего пути к бандлам отрезается чанк до точки (desktop.bundles -> desktop) и используется как ключ для хеша, возвращаемого методом getLevelsMap.В вашем случае ключ оказывается
site
и возвращаетundefined
в качестве набора уровней. Отсюда и ошибка.Если у вас чисто десктопный проект, то вся эта логика просто не нужна и можно сделать так:
Во, огромное спасибо! Теперь начало окончательно проясняться.
Вроде, и смотрел в make.js, а ключ desktop проглядел с непривычки.
Да, у нас будет чисто десктопный проект. Во всяком случае, сначала. Но в одном репозитории решили собрать все фронтенды.
Так я и поступлю. А в будущем уже будет понятно, где и что чинить.
Теперь уже будет проще прикрутить те же bootstrap-bl как блоки. Спасибо!
Все реализации
bootstrap-bl
устарели чуть более, чем полностью. А каких именно блоков не хватает в bem-components? Возможно, подскажу, где взять актуальные аналоги.@tadatuta btw, нужен ли вообще бутстрап или, если очень нравится, можно обойтись скином под бутстрап? Ты, как знаток бэм-компонентов и бустрапа, как думаешь? Может быть продублировать недостающие блоки? Мне почему-то кажется, что их там не очень много.
@zxqfox учитывая, что @Coltspb только что вмержил
modal
, кажется, из полезного остались только сетка и типографика. Сетка есть, например, в bem-grid и кое-что про контентные блоки в bem-content у @verybigman. Блоки после хакатона пока лежат у @sipayRT: https://github.com/sipayRT/hackaton/tree/hackaton/common.blocks Еще всякое полезное есть у @voischev: https://github.com/voischev?tab=repositoriesВ общем, похоже, что реально недостающих блоков-то и не остается. А вот нужен ли кому-то реально скин Бутстрапа — это вопрос. Но если вдруг действительно нужен, портирование не должно оказаться слишком сложным делом.
:+1: более чем полностью достаточно тех бэм библиотек которые уже есть. Есть еще вот тут либа https://github.com/factorymn/bem-factory
Всем приветы ещё раз. Спасибо за ссылки, будем изучать.
Вопрос с Bootstrap'ом сложный. Краткий ответ: так исторически сложилось. Всех подробностей не знаю пока, сам не верстаю, но факт использования мне известен. Интересен был не скин, интересны были прикладные, скажем так, функции. В частности, точно знаю, что используют responsive.
Было бы интересно, конечно, увидеть какой-нибудь map блоков того же bootstrap-bl на другие бибилиотеки, если он есть.
Всё осложняется тем, что "нужно уже вчера", все мы специалисты "старой школы" ;) и в новые технологии коллеги входят со скрипом. Поэтому всё хотелось бы сделать по возможности быстро, если не ещё быстрее.
@tadatuta Please http://bem.info/libs/ ?
Еще появилась мысль сделать пару демо скинов под bem-components. В т.ч. может быть и скин бутстрапа. Но пугает изменение блоков — не развалятся ли скины при обновлении bem-components?
@zxqfox На http://bem.info/libs/ пока хотим держать только те библиотеки, за которые готовы сами отвечать, поддерживать и развивать.
Библиотеки внешних ребят приглашаем к публикации на http://ru.bem.info/built-with-b/ Если будет необходимость, структурно сможем представить их аналогично библиотекам из раздела libs.
По поводу скинов для bem-components — да, было бы круто. Начать можно с Метро-дизайна, как самого простого с точки зрения реализации. Но сами мы непонятно когда сможем до этого добраться :(
Остается надеяться на контрибьюторов ;)
@RedHedgehog Сетка из https://github.com/verybigman/bem-grid отзывчивая. Сравнительную статью bem-components vs. Bootstrap попробуем написать. Но это точно не случится быстро — в главном приоритете документация на блоки и технологии.
Сетка https://github.com/verybigman/bem-grid просто афигенная. Мы засилосовали ее в ну очень сложном макете и она даже больше чем идеально справилась. С простыми задачами справляется так же.
Рекомендую всем! :)
@tadatuta Отлично. Попробуем справиться тем, что есть. И будем ждать доков.