Недавно пришлось пописать на PUGJS... долго не смог это терпеть. Пришлось запилить 100 строчек кода, что бы писать нормальные шаблоны на BEMHTML в ExpressJS.
Код доступен как модуль https://www.npmjs.com/package/express-bem-xjst
Он умеет правильно работать с уровнями, кешируется и даже ничего не портит. Пробовал подключать bem-components — шаблонизирует все правильно.
Приятного использования тем, кто больше не может использовать ничего кроме BEM-XJST в шаблонах 😉
@voischev Оно ведь не учитывает порядок?
Если брать готовые бандлы, то есть вот такая штука — https://github.com/stochastical/express-bem-xjst-renderer. Здесь в том числе есть поддержка BEMTREE.
cc @stochastical
Порядок учитывается на уровне блоков. (блок/элемет/модификатор...) и файловой системы Порядок уровней можно задать в массиве с уровнями.
То есть работает тема с переопределением блоков из bem-components на своем уровне например
Кажется этого достаточно для порядка. Я пока не придумал как это сломать если осознанно этого не захотеть. (так же можно сломать и когда есть сборка с депсами)
По ссылке что ты привел, к сожалению слишком простая реализация подхода с bem-xjst шаблонами в expressjs. Неудобно работать с блоками – приходится писать в одном файле. Ну и порядок соответственно задается вручную в этом файле. Кажется невозможно положить шаблон на элемент в отдельный файл. А еще приходится писать bemjson прямо в серверном коде.
Что прям совсем не похоже другие шаблонизаторы в expressjs
В моем пакете все это делается автоматом и не нужно писать bemjson в серверном коде
bemtree руки не дошли добавить) но кажется там тупо сделать
bemhtml || bemtree
и будет работатьне понимаю. всегда, когда в коде есть
mustDeps
для шаблонов будет получаться бандл Шредингера — он либо случайно будет работать, либо нет;) я тебе могу лично рассказать. Мне сложно текстом. Пока просто поверь что все работает как надо или докажи обратное :)
Пусть есть блок, у которого есть некий контент и 4 модификатора, которые должны досыпать в контент дополнительные данные в строго определенном порядке, не совпадающем с алфавитным порядком имен модификаторов. Модификаторы могут быть включены одновременно:
Ожидаемый результат:
pen pineapple apple ahh pen-pineapple-apple-pen
.@tadatuta Стоп, там идеальный код. Не мне тебе рассказывать что это такое!
p.s. А то начнутся тэсты-шмэсты.
@zxqfox
я, как человек, пишущий только идеальный код, никогда не утверждаю, что он в принципе может запускаться, а Ваня говорит, что оно не только работает, но еще и правильно работает при любом раскладе. хотя я бы постеснялся делать такие утверждения даже при использовании сборки по депсам (т.к. доподлинно известно, что ни одна реализация депсов не работает правильно, хотя вы и хвастаетесь кавереджем ;))
@voischev Да, Вова прав. :-)
p.s.
а тут нет 🤓
я говорю что все те же проблемы сломать порядок остались) Если захотеть можно сломать Виды сортировки я перечислил.