enb-bem-examples
Инструмент для генерации сетов из примеров БЭМ-блоков с помощью ENB.
Установка
$ npm install --save-dev enb-bem-examples
Для работы модуля требуется зависимость от пакетов enb-magic-factory версии 0.3.x или выше, а так же enb версии 0.15.0 или выше.
Технология examples в файловой системе
Примеры — это обычные бандлы, которые располагаются в папке технологии examples той БЭМ-сущности, которой они принадлежат.
В файловой системе они складываются плоским списком (simple-уровень):
$ tree -a <level>.blocks/<block-name>/<block-name>.examples
<block-name>.examples/
├── 10-simple.bemjson.js # `10-simple` бандл в технологии `bemjson.js`
├── 10-simple.title.txt # `10-simple` бандл в технологии `title.txt`
├── 20-complex.bemjson.js # `20-simple` бандл в технологии `bemjson.js`
└── 20-complex.title.txt # `20-simple` бандл в технологии `title.txt`
У каждого примера может быть свой уровень блоков:
$ tree -a <level>.blocks/<block-name>/<block-name>.examples
<block-name>.examples/
├── blocks/ # уровень для всех примеров блока `<block-name>`
├── 10-simple.blocks/ # уровень только для примера `10-simple`
└── 10-simple.bemjson.js
В результате будет построен сет из примеров, каждый из которых представляет собой обычный бандл (nested-уровень):
$ tree -a <set-name>.examples
<set-name>.examples
└── <block-name>/ # папка группирует примеры для БЭМ-сущности
├── 10-simple/ # `10-simple` бандл
├── <block-name>.blocks/ # уровень для всех примеров блока `<block-name>`
├── 10-simple.blocks/ # уровень блоков только для примера `10-simple`
└── 10-simple.bemjson.js # `10-simple` бандл в технологии `bemjson.js`
└── 20-complex/ # `20-simple` бандл
├── <block-name>.blocks/ # уровень для всех примеров блока `<block-name>`
├── 20-complex.blocks/ # уровень блоков только для примера `20-simple`
└── 20-complex.bemjson.js # `20-simple` бандл в технологии `bemjson.js`
Примеры из документации (инлайновые примеры)
При написании документации в md-файлах используют вставки bemjson-кода.
Например, вставка bemjson-кода для блока button:
{
block: 'button',
mods: { theme: 'normal', size: 'm', view: 'action' },
type: 'submit',
text: 'Action'
}
Такие вставки можно собирать в файловую систему в сеты так же, как и обычные примеры технологии examples.
При сборке сета название бандла для инлайнового примера будет уникальным. Оно формируется из хэш-суммы bemjson-кода примера.
Например, путь до банда с примерами блока button, представленным выше:
desktop.examples/button/F_1FoglPvs4YpLRQGeUEiM6w4CY
Как использовать?
В make-файле (.enb/make.js) нужно подключить модуль enb-bem-examples.
С помощью этого модуля следует создать конфигуратор, указав название таска в рамках которого будет происходить сборка уровней сетов из примеров.
Конфигуратор имеет единственный метод configure. Его можно вызывать несколько раз, чтобы задекларировать сборку нескольких сетов.
module.exports = function (config) {
config.includeConfig('enb-bem-examples'); // Подключаем модуль `enb-bem-examples`.
var examples = config.module('enb-bem-examples') // Создаём конфигуратор сетов
.createConfigurator('examples'); // в рамках `examples`-таска.
examples.configure({
destPath: 'desktop.examples',
levels: ['blocks']
});
};
Опции
String
destPath— путь относительно корня до нового сета с бандлами примеров, которые нужно собрать. Обязательная опция.String[] | Object[]
levels— уровни в которых следует искать примеры. Обязательная опция.String[]
techSuffixes— суффиксы папок технологий с примерами. По умолчанию —['examples'].String[]
fileSuffixes— суффиксы файлов внутри папок технологий с примерами. По умолчанию —['bemjson.js'].Boolean
inlineBemjson— определяет возможность создания инлайновых примеров из md-файлов. По умолчанию —false.Function
processInlineBemjson— функция обработки инлайновогоbemjson.
Запуск из консоли
В make-файле декларируется таск, в котором будет выполняться сборка сетов из примеров.
В ENB запуск таска осуществляется с помощью команды make, которой передаётся имя таска:
$ ./node_modules/.bin/enb make <task-name>
Сборка всех примеров
Если сборка сетов из примеров была задекларирована в examples-таске:
$ ./node_modules/.bin/enb make examples
Сборка указанного примера (точечная сборка)
Передаём список путей примеров, по которым должны собраться бандлы внутри сета:
$ ./node_modules/.bin/enb make <task-name> path/to/example-1 path/to/example-2
Чтобы собрать пример 10-simple, принадлежащий БЭМ-сущности block__elem, для сета desktop.examples:
$ ./node_modules/.bin/enb make examples desktop.examples/block__elem/10-simple
Сборка всех примеров указанной БЭМ-сущности
Чтобы собрать все примеры БЭМ-сущности block__elem для сета desktop.examples:
$ ./node_modules/.bin/enb make examples desktop.examples/block__elem
Лицензия
© 2014 YANDEX LLC. Код лицензирован Mozilla Public License 2.0.