bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

BEMHTML движок для ExpressJS #1255

Open voischev opened 7 years ago

voischev commented 7 years ago

Недавно пришлось пописать на PUGJS... долго не смог это терпеть. Пришлось запилить 100 строчек кода, что бы писать нормальные шаблоны на BEMHTML в ExpressJS.

Код доступен как модуль https://www.npmjs.com/package/express-bem-xjst

Он умеет правильно работать с уровнями, кешируется и даже ничего не портит. Пробовал подключать bem-components — шаблонизирует все правильно.

Приятного использования тем, кто больше не может использовать ничего кроме BEM-XJST в шаблонах 😉

tadatuta commented 7 years ago

@voischev Оно ведь не учитывает порядок?

Если брать готовые бандлы, то есть вот такая штука — https://github.com/stochastical/express-bem-xjst-renderer. Здесь в том числе есть поддержка BEMTREE.

cc @stochastical

voischev commented 7 years ago

Порядок учитывается на уровне блоков. (блок/элемет/модификатор...) и файловой системы Порядок уровней можно задать в массиве с уровнями.

То есть работает тема с переопределением блоков из bem-components на своем уровне например

Кажется этого достаточно для порядка. Я пока не придумал как это сломать если осознанно этого не захотеть. (так же можно сломать и когда есть сборка с депсами)

По ссылке что ты привел, к сожалению слишком простая реализация подхода с bem-xjst шаблонами в expressjs. Неудобно работать с блоками – приходится писать в одном файле. Ну и порядок соответственно задается вручную в этом файле. Кажется невозможно положить шаблон на элемент в отдельный файл. А еще приходится писать bemjson прямо в серверном коде.

Что прям совсем не похоже другие шаблонизаторы в expressjs

В моем пакете все это делается автоматом и не нужно писать bemjson в серверном коде

bemtree руки не дошли добавить) но кажется там тупо сделать bemhtml || bemtree и будет работать

tadatuta commented 7 years ago

не понимаю. всегда, когда в коде есть mustDeps для шаблонов будет получаться бандл Шредингера — он либо случайно будет работать, либо нет

voischev commented 7 years ago

;) я тебе могу лично рассказать. Мне сложно текстом. Пока просто поверь что все работает как надо или докажи обратное :)

tadatuta commented 7 years ago

Пусть есть блок, у которого есть некий контент и 4 модификатора, которые должны досыпать в контент дополнительные данные в строго определенном порядке, не совпадающем с алфавитным порядком имен модификаторов. Модификаторы могут быть включены одновременно:

{
     block: 'pen-pineapple-apple-pen',
     mods: { pen: true, pineapple: true, apple: true, all: true },
     content: 'ahh'
}

Ожидаемый результат: pen pineapple apple ahh pen-pineapple-apple-pen.

qfox commented 7 years ago

@tadatuta Стоп, там идеальный код. Не мне тебе рассказывать что это такое!

p.s. А то начнутся тэсты-шмэсты.

tadatuta commented 7 years ago

@zxqfox

там идеальный код. Не мне тебе рассказывать что это такое!

я, как человек, пишущий только идеальный код, никогда не утверждаю, что он в принципе может запускаться, а Ваня говорит, что оно не только работает, но еще и правильно работает при любом раскладе. хотя я бы постеснялся делать такие утверждения даже при использовании сборки по депсам (т.к. доподлинно известно, что ни одна реализация депсов не работает правильно, хотя вы и хвастаетесь кавереджем ;))

qfox commented 7 years ago

а Ваня говорит, что оно не только работает, но еще и правильно работает

@voischev Да, Вова прав. :-)

p.s.

что ни одна реализация депсов не работает правильно, хотя вы и хвастаетесь кавереджем ;))

а тут нет 🤓

voischev commented 7 years ago

я говорю что все те же проблемы сломать порядок остались) Если захотеть можно сломать Виды сортировки я перечислил.