Пакет предоставляет следующие технологии:
- bemhtml — для сборки шаблонов;
- bemtree — для сборки шаблонов;
- bemjson-to-html — для генерации HTML.
Собирает bemhtml.js
-файлы блоков в один файл — ?.bemhtml.js
-бандл, который используется для работы как в браузере, так и в Node.js
. Не требует подключения исходных файлов шаблонов.
Поддерживает YModules и частично CommonJS, так как в bemhtml.js
-файлах функция require
не будет работать корректно.
Если в исполняемой среде нет ни одной модульной системы, то модуль будет предоставлен в глобальную переменную BEMHTML
.
Опции указываются в конфигурационном файле (.enb/make.js
).
Тип: String
. По умолчанию: ?.bemhtml.js
.
Имя скомпилированного файла, куда будет записан результат сборки необходимых bemhtml.js
-файлов проекта.
Тип: String
. По умолчанию: ?.files
.
Имя таргета, откуда будет доступен список исходных файлов для сборки. Список файлов предоставляет технология files пакета enb-bem-techs.
Тип: String | String[]
. По умолчанию: ['bemhtml.js']
.
Суффиксы файлов, по которым отбираются файлы BEMHTML-шаблонов для дальнейшей сборки.
Тип: Object
. По умолчанию: {}
.
Задает имена или пути для подключения сторонних библиотек.
Принцип работы описан в разделе Подключение сторонних библиотек.
Тип: String
. По умолчанию: BEMHTML
.
Название, по которому будет доступен BEMHTML-модуль. Способы использования зависят от наличия модульной системы и ее типа. Модуль может применяться в следующих случаях:
-
Исполнение шаблонов в
Node.js
.var BEMHTML = require('bundle.bemhtml.js').BEMHTML; BEMHTML.apply({ block: 'button' }); // <button class="button">...</button>
-
Исполнение шаблонов в браузере без модульной системы.
BEMHTML.apply({ block: 'button' }); // <button class="button">...</button>
-
Исполнение шаблонов в браузере c YModules.
modules.require(['BEMHTML'], function(BEMHTML) { BEMHTML.apply({ block: 'button' }); // <button class="button">...</button> });
Тип: Boolean
. По умолчанию false
.
Включать ли ядро в сборку, если нет пользовательских шаблонов.
По умолчанию, если пользовательских шаблонов нет, то и код ядра bem-xjst
также не будет включен в сборку.
Тип: Object
. По умолчанию {}
.
Передает настройки BEMHTML-движка для bem-xjst
.
Устарело! Используйте engineOptions.naming
.
Тип: Object
. По умолчанию: { elem: '__', mod: '_' }
.
Соглашение об именовании БЭМ-сущностей для генерации CSS-классов:
- String
elem
— отделяет имя элемента от блока. - String
mod
— отделяет названия и значения модификаторов от блоков и элементов.
Пример
{
block : 'button',
mods : { disabled : true },
content : 'Неактивна'
}
По умолчанию CSS-классы будут сгенерированы согласно оригинальному соглашению об именовании БЭМ-сущностей.
<button class="button button_disabled">Неактивна</button>
Чтобы использовать стиль Гарри Робертса укажите --
в качестве разделителя для модификатора.
naming: { elem: '__', mod: '--' }
В результате получится следующий HTML-код:
<button class="button button--disabled">Неактивна</button>
Пример
var BemhtmlTech = require('enb-bemxjst/techs/bemhtml'),
FileProvideTech = require('enb/techs/file-provider'),
bemTechs = require('enb-bem-techs');
module.exports = function(config) {
config.node('bundle', function(node) {
// Получаем FileList
node.addTechs([
[FileProvideTech, { target: '?.bemdecl.js' }],
[bemTechs.levels, { levels: ['blocks'] }],
[bemTechs.deps],
[bemTechs.files]
]);
// Создаем BEMHTML-файл
node.addTech(BemhtmlTech);
node.addTarget('?.bemhtml.js');
});
};
Собирает bemtree.js
-файлы блоков в один файл — ?.bemtree.js
-бандл, который используется для работы как в браузере, так и в Node.js
. Не требует подключения исходных файлов шаблонов.
Поддерживает YModules и частично CommonJS, так как в bemhtml.js
-файлах функция require
не будет работать корректно.
Если в исполняемой среде нет ни одной модульной системы, то модуль будет предоставлен в глобальную переменную BEMTREE
.
Опции указываются в конфигурационном файле (.enb/make.js
).
Тип: String
. По умолчанию: ?.bemtree.js
.
Имя скомпилированного файла, куда будет записан результат сборки необходимых bemtree.js
-файлов проекта.
Тип: String
. По умолчанию: ?.files
.
Имя таргета, откуда будет доступен список исходных файлов для сборки. Список файлов предоставляет технология files пакета enb-bem-techs.
Тип: String | String[]
. По умолчанию: ['bemtree.js']
.
Суффиксы файлов, по которым отбираются файлы BEMHTML-шаблонов для дальнейшей сборки.
Тип: Object
. По умолчанию: {}
.
Задает имена или пути для подключения сторонних библиотек.
Принцип работы описан в разделе Подключение сторонних библиотек.
Тип: String
. По умолчанию: BEMTREE
.
Название, по которому будет доступен BEMTREE-модуль. Способы использования зависят от наличия модульной системы и ее типа. Модуль может применяться в следующих случаях:
-
Исполнение шаблонов в
Node.js
.var BEMTREE = require('bundle.bemtree.js').BEMTREE; BEMTREE.apply({ block: 'page' }); // { block: 'page', content: [...] }
-
Исполнение шаблонов в браузере без модульной системы.
BEMTREE.apply({ block: 'page' }); // { block: 'page', content: [...] }
-
Исполнение шаблонов в браузере c YModules.
modules.require(['BEMTREE'], function(BEMTREE) { BEMTREE.apply({ block: 'button' }); // { block: 'page', content: [...] } });
Тип: Boolean
. По умолчанию false
.
Включать ли ядро в сборку, если нет пользовательских шаблонов.
По умолчанию, если пользовательских шаблонов нет, то и код ядра bem-xjst
также не будет включен в сборку.
Пример
var BemtreeTech = require('enb-bemxjst/techs/bemtree'),
FileProvideTech = require('enb/techs/file-provider'),
bemTechs = require('enb-bem-techs');
module.exports = function(config) {
config.node('bundle', function(node) {
// Получаем FileList
node.addTechs([
[FileProvideTech, { target: '?.bemdecl.js' }],
[bemTechs.levels, { levels: ['blocks'] }],
[bemTechs.deps],
[bemTechs.files]
]);
// Создаем BEMTREE-файл
node.addTech(BemtreeTech);
node.addTarget('?.bemtree.js');
});
};
Предназначен для сборки HTML-файла. Принимает на вход BEMJSON и скомпилированный ?.bemhtml.js
-файл (результат работы технологий bemhtml), возвращает HTML (файл ?.html
).
Опции указываются в конфигурационном файле (.enb/make.js
).
Тип: String
. По умолчанию: ?.html
.
HTML-файл — результат применения скомпилированных шаблонов к указанному BEMJSON-файлу.
Тип: String
. По умолчанию: ?.bemhtml.js
.
Имя файла, в котором содержатся шаблоны, скомпилированные технологией bemhtml. Используется для преобразования BEMJSON в HTML.
Тип: String
. По умолчанию: ?.bemjson.js
.
Имя BEMJSON-файла, к которому применится скомпилированный шаблон ?.bemhtml.js
(результат работы технологии bemhtml) для получения HTML.
Пример
var BemjsonToHtmlTech = require('enb-bemxjst/techs/bemjson-to-html'),
BemhtmlTech = require('enb-bemxjst/techs/bemhtml'),
FileProvideTech = require('enb/techs/file-provider'),
bemTechs = require('enb-bem-techs');
module.exports = function(config) {
config.node('bundle', function(node) {
// Получает BEMJSON-файл
node.addTech([FileProvideTech, { target: '?.bemjson.js' }]);
// Получает FileList
node.addTechs([
[bemTechs.levels, { levels: ['blocks'] }],
[bemTechs.bemjsonToBemdecl],
[bemTechs.deps],
[bemTechs.files]
]);
// Собирает BEMHTML-файл
node.addTech(BemhtmlTech);
node.addTarget('?.bemhtml.js');
// Создает HTML-файл
node.addTech(BemjsonToHtmlTech);
node.addTarget('?.html');
});
};