Ранее в статье Создаём минимальный проект на БЭМ c нуля мы создали проект на БЭМ. Однако он пока довольно бесполезен. Пришло время расширить его добавив уже готовые решения и компоненты предоставленные компанией Yandex.
Собственно можно обойтись и без этого, но я не вижу причин не использовать опыт накопленный инженерами Yandex и не использовать их решения, уже проверенные в боевых условиях на множестве их проектов.
Итак — поехали!
Устанавливаем bem-core и bem-components — соответственно минимальный набор блоков и технологий и набор дополнительных компонентов.
Вот только как же это сделать? Документация просто божественна — «Вы также можете добавить библиотеку к себе в проект любым известным вам способом.».
Ну или опять через project-stub. Похоже никто уже не помнит как всё это хозяйство собирать.
Ну что — поехали ставить bower (если у вас его ещё нет). Ну даже если есть — пусть хоть добавится в package.json
$ npm install -g bower --save
$ bower init
Ставим bem-core и bem-components
$ bower install bem-core --save
bower bem-core#* cached https://github.com/bem/bem-core.git#3.0.1
bower bem-core#* validate 3.0.1 against https://github.com/bem/bem-core.git#*
$ bower install bem-components --save
bower bem-components#* cached https://github.com/bem/bem-components.git#3.0.0
bower bem-components#* validate 3.0.0 against https://github.com/bem/bem-components.git#*
bower bem-components#^3.0.0 install bem-components#3.0.0
bem-components#3.0.0 bower_components/bem-components
└── bem-core#3.0.1
bem-core
В этой библотеке только 2 HTML элемента — это page и clearfix. Остальное — javascript функции.
Правим ENB конфиг
Добавляем уровни переопределения для bem-core.
...
levels = [
{ path: 'bower_components/bem-core/common.blocks', check: false },
{ path: 'bower_components/bem-core/desktop.blocks', check: false },
];
Теперь сборщик для каждого блока из bemjson файла будет проверять, а нет ли уже такого блока по указанным путям. Если есть, то он использует все технологии для этого блока из существующих компонентов, но в тоже время не помешает нам переопределить их как нам надо в нашей конкретной реализации.
И добавляем в BEMHTML суффикс bemhtml т. к. компоненты используют файлы bemhtml не в js формате.
[techs.bemhtml, { sourceSuffixes: ['bemhtml', 'bemhtml.js'], forceBaseTemplates: true }],
Формируем правильную HTML страницу
Запускаем перегенерацию проекта
$ ./node_modules/.bin/enb make
Проверяем, что блок page теперь не div, а полноценная страница с тегами <head>, <body> и т. п.
bem-components
Добавляем bem-components в уровни переопределения.
...
levels = [
levels = [
{ path: 'bower_components/bem-core/common.blocks', check: false },
{ path: 'bower_components/bem-core/desktop.blocks', check: false },
{ path: 'bower_components/bem-components/common.blocks', check: false },
{ path: 'bower_components/bem-components/desktop.blocks', check: false },
{ path: 'bower_components/bem-components/design/common.blocks', check: false },
{ path: 'bower_components/bem-components/design/desktop.blocks', check: false }
];
];
Добавляем в bemjson какой-нибудь компонент. В нашем случае это будет button. Ну и после перегенерации страницы можем наблюдать HTML код нашей кнопки в теле нашей страницы.
Итого
- Подключены bem-core и bem-components
Комментарии