Привет,
сегодня сразу две хорошие новости — мы выпустили два важных пакета!
Во-первых, пакет 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!