Forum

Methodology

Toolbox

Platform

Community

The translation of this article into your language is missing, you can help us translate.

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

Тип: Object. По умолчанию: {}.

Задает имена или пути для подключения сторонних библиотек.

Принцип работы описан в разделе Подключение сторонних библиотек.

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>

Чтобы использовать стиль Гарри Робертса укажите -- в качестве разделителя для модификатора.

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

Тип: Object. По умолчанию: {}.

Задает имена или пути для подключения сторонних библиотек.

Принцип работы описан в разделе Подключение сторонних библиотек.

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');
    });
};
If you notice a mistake or want something to supplement the article, you can always write to us at GitHub, or correct an article using prose.io.