API технологий
Пакет предоставляет следующие технологии:
для сборки BH-шаблонов:
для генерации HTML:
bh-bundle
Собирает bh.js
-файлы блоков и ядро в один файл — ?.bh.js
-бандл, который используется для работы как в браузере, так и в Node.js. После сборки не требует подключения исходных файлов шаблонов.
Поддерживает модульные системы YModules и частично CommonJS, так как в bh.js
-файлах функция require
не будет работать корректно.
Если в исполняемой среде нет ни одной модульной системы, то модуль будет предоставлен в глобальную переменную BH
.
Опции
Опции указываются в конфигурационном файле (.enb/make.js).
target
Тип: String
. По умолчанию: ?.bh.js
.
Имя скомпилированного файла, куда будет записан результат сборки необходимых bh.js
-файлов проекта.
filesTarget
Тип: String
. По умолчанию: ?.files
.
Имя таргета, откуда будет доступен список исходных файлов для сборки. Список файлов предоставляет технология files пакета enb-bem-techs.
sourceSuffixes
Тип: String | String[]
. По умолчанию: ['bh.js']
.
Суффиксы файлов, по которым отбираются файлы с BH-шаблонами для дальнейшей сборки.
bhFilename
Тип: String
. По умолчанию: require.resolve('bh/lib/bh.js')
.
Путь к файлу с ядром BH.
Следует использовать, если необходима нестандартная версия шаблонизатора BH.
Важно! Технология bh-bundle гарантирует правильную работу только с шаблонизатором BH версии 4.1.0
sourcemap
Тип: Boolean
. По умолчанию: false
.
Построение карт кода (source maps) с информацией об исходных файлах. Карты встраиваются в скомпилированный файл ?.files
, а не хранятся в отдельном файле с расширением .map
.
requires
Тип: Object
. По умолчанию: {}
.
Задает имена или пути для подключения внешних библиотек в пространстве имен bh.lib
— bh.lib.name
.
Принцип работы описан в разделе Подключение сторонних библиотек.
mimic
Тип: String | String[]
. По умолчанию — ['bh']
.
Задает имена новых переменных.
Принцип работы описан в разделе Мимикрия под BEMHTML.
scope
Тип: String
. По умолчанию: template
.
Задает область видимости для исходного кода шаблонов.
Возможные значения:
template
— изолирует выполнение шаблонов друг от друга;global
— позволяет выполнять шаблоны в общей области видимости.
bhOptions
Тип: Object
. По умолчанию: {}
.
Настраивает шаблонизатор BH с помощью переданных опций.
Возможные настройки описаны в документации шаблонизатора.
Пример
var BHBundleTech = require('enb-bh/techs/bh-bundle'),
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]
]);
// Создаем BH-файл
node.addTech(BHBundleTech);
node.addTarget('?.bh.js');
});
};
bh-commonjs
Собирает bh.js
-файлы блоков в один файл — ?.bh.js
-бандл, который используется для работы в Node.js. После сборки требуется наличие всех файлов, подключенных с помощью require
.
В шаблоны зависимости подключаются с помощью require
. Все пути обрабатываются относительно того файла, в котором прописан require
.
Результат сборки — ?.bh.js
-файл, который содержит подключения необходимых исходных bh.js
-файлов и файла ядра из node_modules
.
Опции
Опции указываются в конфигурационном файле (.enb/make.js).
target
Тип: String
. По умолчанию: ?.bh.js
.
Имя таргета, куда будет записан результат сборки необходимых bh.js
-файлов проекта — скомпилированный файл ?.bh.js
.
filesTarget
Тип: String
. По умолчанию: ?.files
.
Имя таргета, откуда будет доступен список исходных файлов для сборки. Список файлов предоставляет технология files пакета enb-bem-techs.
sourceSuffixes
Тип: String | String[]
. По умолчанию: ['bh.js']
.
Суффиксы файлов, по которым отбираются файлы с BH-шаблонами для дальнейшей сборки.
bhFilename
Тип: String
. По умолчанию: require.resolve('bh/lib/bh.js')
.
Путь к файлу с ядром BH.
Следует использовать, если необходима нестандартная версия шаблонизатора BH.
Важно! технология bh-commonjs гарантирует правильную работу только с шаблонизатором BH версии 4.1.0
и выше.
devMode
Тип: Boolean
. По умолчанию: true
.
Режим сборки, при котором каждое новое подключение собранного файла инициирует сброс кэша require
для всех внутренних файлов. Это позволяет видеть изменения в шаблонах без перезапуска Node.js.
mimic
Тип: String | Array
. По умолчанию: ['bh']
.
Задает имена новых переменных.
Принцип работы описан в разделе Мимикрия под BEMHTML.
bhOptions
Тип: Object
. По умолчанию: {}
.
Настраивает шаблонизатор BH с помощью переданных опций.
Возможные настройки описаны в документации шаблонизатора.
Пример
var BHCommonJSTech = require('enb-bh/techs/bh-commonjs'),
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]
]);
// Собираем BH-файл
node.addTech(BHCommonJSTech);
node.addTarget('?.bh.js');
});
};
bemjson-to-html
Предназначена для сборки HTML-файла. Обрабатывает BEMJSON и скомпилированный ?.bh.js
-файл (результат работы технологий bh-bundle или bh-commonjs) для получения HTML.
Опции
Опции указываются в конфигурационном файле (.enb/make.js).
bhFile
Тип: String
. По умолчанию: ?.bh.js
.
Имя файла, в котором содержится шаблон, скомпилированный одной из технологий (bh-bundle или bh-commonjs). Используется для преобразования BEMJSON в HTML.
bemjsonFile
Тип: String
. По умолчанию: ?.bemjson.js
.
Имя BEMJSON-файла, к которому применится скомпилированный шаблон ?.bh.js
(результат работы технологий bh-bundle или bh-commonjs) для получения HTML.
target
Тип: String
. По умолчанию: ?.html
.
HTML-файл — результат применения скомпилированного шаблона к указанному BEMJSON-файлу.
Пример
var BemjsonToHtmlTech = require('enb-bh/techs/bemjson-to-html'),
BHCommonJSTech = require('enb-bh/techs/bh-commonjs'),
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]
]);
// Собираем BH-файл
node.addTech(BHCommonJSTech);
node.addTarget('?.bh.js');
// Создаем HTML-файл
node.addTech(BemjsonToHtmlTech);
node.addTarget('?.html');
});
};