API технологий
Пакет предоставляет следующие технологии:
bemhtml — для сборки шаблонов;
bemtree — для сборки шаблонов;
bemjson-to-html — для генерации HTML.
bemhtml
Собирает bemhtml.js
-файлы блоков в один файл — ?.bemhtml.js
-бандл, который используется для работы как в браузере, так и в Node.js. Не требует подключения исходных файлов шаблонов.
Поддерживает YModules и частично CommonJS, так как в bemhtml.js
-файлах функция require
не будет работать корректно.
Если в исполняемой среде нет ни одной модульной системы, то модуль будет предоставлен в глобальную переменную BEMHTML
.
Опции
Опции указываются в конфигурационном файле (.enb/make.js
).
target
Тип: String
. По умолчанию: ?.bemhtml.js
.
Имя скомпилированного файла, куда будет записан результат сборки необходимых bemhtml.js
-файлов проекта.
filesTarget
Тип: String
. По умолчанию: ?.files
.
Имя таргета, откуда будет доступен список исходных файлов для сборки. Список файлов предоставляет технология files пакета enb-bem-techs.
sourceSuffixes
Тип: String | String[]
. По умолчанию: ['bemhtml.js']
.
Суффиксы файлов, по которым отбираются файлы BEMHTML-шаблонов для дальнейшей сборки.
requires
Устарело! Используйте engineOptions.requires
.
Тип: Object
. По умолчанию: undefined
.
Задает имена или пути для подключения сторонних библиотек.
Принцип работы описан в разделе Подключение сторонних библиотек.
exportName
Тип: 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> });
forceBaseTemplates
Тип: Boolean
. По умолчанию false
.
Включать ли ядро в сборку, если нет пользовательских шаблонов.
По умолчанию, если пользовательских шаблонов нет, то и код ядра bem-xjst
также не будет включен в сборку.
engineOptions
Тип: Object
. По умолчанию {}
.
Передает настройки BEMHTML-движка для bem-xjst
.
naming
Устарело! Используйте engineOptions.naming
.
Тип: Object
. По умолчанию: { elem: '__', mod: '_' }
.
Соглашение об именовании БЭМ-сущностей для генерации CSS-классов:
String
elem
— отделяет имя элемента от блока.String
mod
— отделяет названия и значения модификаторов от блоков и элементов.
Пример
{
block : 'button',
mods : { disabled : true },
content : 'Неактивна'
}
По умолчанию CSS-классы будут сгенерированы согласно оригинальному соглашению об именовании БЭМ-сущностей.
<button class="button button_disabled">Неактивна</button>
Чтобы использовать стиль Two Dashes укажите --
в качестве разделителя для модификатора.
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
Собирает bemtree.js
-файлы блоков в один файл — ?.bemtree.js
-бандл, который используется для работы как в браузере, так и в Node.js
. Не требует подключения исходных файлов шаблонов.
Поддерживает YModules и частично CommonJS, так как в bemhtml.js
-файлах функция require
не будет работать корректно.
Если в исполняемой среде нет ни одной модульной системы, то модуль будет предоставлен в глобальную переменную BEMTREE
.
Опции
Опции указываются в конфигурационном файле (.enb/make.js
).
target
Тип: String
. По умолчанию: ?.bemtree.js
.
Имя скомпилированного файла, куда будет записан результат сборки необходимых bemtree.js
-файлов проекта.
filesTarget
Тип: String
. По умолчанию: ?.files
.
Имя таргета, откуда будет доступен список исходных файлов для сборки. Список файлов предоставляет технология files пакета enb-bem-techs.
sourceSuffixes
Тип: String | String[]
. По умолчанию: ['bemtree.js']
.
Суффиксы файлов, по которым отбираются файлы BEMHTML-шаблонов для дальнейшей сборки.
requires
Устарело! Используйте engineOptions.requires
.
Тип: Object
. По умолчанию: undefined
.
Задает имена или пути для подключения сторонних библиотек.
Принцип работы описан в разделе Подключение сторонних библиотек.
exportName
Тип: 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: [...] } });
forceBaseTemplates
Тип: Boolean
. По умолчанию false
.
Включать ли ядро в сборку, если нет пользовательских шаблонов.
По умолчанию, если пользовательских шаблонов нет, то и код ядра bem-xjst
также не будет включен в сборку.
engineOptions
Тип: Object
. По умолчанию {}
.
Передает настройки BEMTREE-движка для 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');
});
};
bemjson-to-html
Предназначен для сборки HTML-файла. Принимает на вход BEMJSON и скомпилированный ?.bemhtml.js
-файл (результат работы технологий bemhtml), возвращает HTML (файл ?.html
).
Опции
Опции указываются в конфигурационном файле (.enb/make.js
).
target
Тип: String
. По умолчанию: ?.html
.
HTML-файл — результат применения скомпилированных шаблонов к указанному BEMJSON-файлу.
bemhtmlFile
Тип: String
. По умолчанию: ?.bemhtml.js
.
Имя файла, в котором содержатся шаблоны, скомпилированные технологией bemhtml. Используется для преобразования BEMJSON в HTML.
bemjsonFile
Тип: 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');
});
};