Войти с помощью github
Форум /

Привет,

сегодня сразу две хорошие новости — мы выпустили два важных пакета!

Во-первых, пакет enb-xjst для сборки BEMHTML в сокращенном (старом) синтаксисе, где в качестве компилятора используется XJST.

Во-вторых, пакет enb-bemxjst для сборки BEMHTML в JS-синтаксисе, который компилируется с помощью BEM-XJST.

Чтобы не запутаться в выборе пакета, надо понять, какая библиотека лежит в основе проекта:

  • enb-xjst подойдёт тем, кто использует bem-bl.
  • enb-bemxjst предназначен для пользователей bem-core.

Теперь, когда мы определились с пакетом, пора узнать обо всех нововведениях.

Подключение сторонних библиотек

В отличии от BH в BEMHTML не было никакой нативной возможности использовать сторонние библиотеки в коде шаблонов.

Теперь это можно сделать с помощью опции requires в конфиге .enb/make.js.

Пример

Подключаем библиотеку moment с помощью модульной системы CommonJS:

{
    requires: {
        moment: {
            commonJS: 'moment'
        }
    }
}

Применяем подключённую библиотеку в шаблоне блока:

block('post').elem('data').content()(function () {
    var moment = this.require('moment');  // Библиотека `moment`

    // Время в миллисекундах, полученное с сервера
    return moment(ctx.param.date).format('YYYY-MM-DD HH:mm:ss');
});

Подробности читайте в документации пакетов enb-xjst и enb-bemxjst.

Скорость сборки

В новых версиях пакетов используется общая очередь дочерних процессов.

По нашим подсчётам, это изменение значительно ускоряет сборку (на 15-30% быстрее).

Кроме того оптимизирован процесс сборки клиентских шаблонов. В ряде случаев это также уменьшает общее время сборки.

BEMTREE

Технология BEMTREE имеет одну особенность: она требует наличие библиотеки для работы с промисами vow в глобальной переменной Vow.

Раньше перед использованием было необходимо предоставить vow в глобальную область видимости. Например, вызывать код шаблонов в новом контексте (vm.runInNewContext()) или доклеить код библиотеки vow в скомпилированный BEMTREE-файл.

Теперь после сборки скомпилированный BEMTREE-файл по умолчанию содержит в себе весь необходимый код. При необходимости это поведение отключается с помощью опции includeVow.

Подробности читайте в описании API технологий для пакетов enb-xjst и enb-bemxjst.

Базовые шаблоны

Когда нас спрашивают о проблемах со сборкой шаблонов, мы первым делом предлагаем проверить, не пропущена ли зависимость от базовых шаблонов. Например, от блока i-bem.bemhtml или i-bem.bemtree.

Если базовые шаблоны не попали в сборку, то остальные не смогут работать корректно и, вероятно, завершатся с непонятной ошибкой.

Error: Match failed.

Теперь такой случай будет корректно обработан, и вы увидите понятное сообщение.

Error: Seems like you have no base templates from i-bem.bemhtml

История изменений

Подробнее обо всех остальных изменениях читайте в истории изменений пакетов enb-xjst и enb-bemxjst.

Вопросы про сборщик ENB традиционно ждем на нашем форуме с меткой enb.

Приятного использования и Stay BEMed!