bem / bem-core

BEM Core Library
https://ru.bem.info/technologies/classic/i-bem/
Other
276 stars 95 forks source link

Templates for create bemhtml, styl files #866

Closed belozer closed 8 years ago

belozer commented 9 years ago

При генерации блоков - генерируется bemhtml следующего содержания

block('block')

При сборке проекта это вызывает ошибку block('block')() — и всё работает нормально

у styl таже проблема. Генерируется только название класса, но отсутствуют скобки

.block

вместо

.block {}
tadatuta commented 9 years ago

@belozyorcev Это сделано осознанно, чтобы в продакшен не попадал бесполезный мусор.

belozer commented 9 years ago

Как это помогает? Почему срабатывает ошибка, а не проходит мимо?

tadatuta commented 9 years ago

если человек создал блок с шаблоном или файлом стилей, то он собирался написать туда что-то осмысленное — ошибки не будет. но если вдруг создал и забыл, то ошибка при сборке ему об этом напомнит и он либо таки напишет, что собирался, либо удалит файл, если он больше не нужен.

belozer commented 9 years ago

Вполне логично :)

Но может стоит в таких случаях более дружелюбный знак давать?

tadatuta commented 9 years ago

пожалуй, было бы неплохо, но мы вряд ли доберемся до этой задачи в обозримое время

qfox commented 9 years ago

Помню аналогичную задачу год назад ;-) Может поправить?

belozer commented 9 years ago

Опишу проблему, на которую на днях наткнулся опять ))

Делал проект на работе... Создал блок, и тут мне нужно было уже идти... Закрыл крышку ноутбука.

Вечером много времени потратил на поиск ошибки, пока не вспомнил, что я создал блок и не описал его.

tadatuta commented 9 years ago

@belozyorcev Чтобы быстро понять, что именно произошло в последний момент должен быть помочь git show последнего коммита ;)

На самом деле это примерно то, о чем я и говорю: если бы не сломалось, остался бы бесполезный забытый шаблон.

Но если есть уверенность, что такое поведение нужно изменить, можно bemhtmlиз https://github.com/bem/project-stub/blob/bem-core/.bem/levels/blocks.js#L27 перенести в массив на 24 строке и положить технологию для сборки bemhtml на уровне проекта в .bem/techs/. В ней отнаследоваться от текущей технологии и перекрыть метод, возвращающий шаблон любым своим кастомым результатом. Подробнее о том, как писать собственные технологии для сборки см. в https://ru.bem.info/tools/bem/bem-tools/tech-modules/ (нужно смотреть на v2).

qfox commented 9 years ago

@tadatuta Может в базовый шаблон добавить // в начало строки?

belozer commented 9 years ago

@zxqfox +1

qfox commented 9 years ago

Простите, что пишу суда, но...

Это сделано осознанно, чтобы в продакшен не попадал бесполезный мусор.

А csso или еще какой пре-, пост-процессор не вырежет этот пустой селектор без тела? В случае bemhtml — разве xjst не отбросит пустые матчеры?

tadatuta commented 9 years ago

@zxqfox ты прав, xjst в продакшен-режиме действительно выкидывает такие матчеры, так что можно и поправить. спасибо!

ilyar commented 9 years ago

Помню аналогичную задачу год назад ;-) Может поправить?

@zxqfox предположу, ты говоришь об этом https://github.com/bem/bem-core/pull/520

@tadatuta вижу такое решение: добавить в документацию о том как переопределять шаблоны создания блоков, а может это уже где то есть, тогда положить ссылку на видное место.

veged commented 9 years ago

давайте завернём результат шаблона в комментарии

ilyar commented 9 years ago

ага, вот так:

// TODO implement block('block')
qfox commented 9 years ago

@ilyar Ну хз.

Я бы оставил:

// block('azaza')()
ilyar commented 9 years ago

@zxqfox + за TODO в том что IDE и редакторы могут их агрегировать в одном месте, но я не настаиваю, просто идея.

qfox commented 9 years ago

@ilyar В целом идея :+1:, но в vim/sublime этого из коробки нет, зато в сублайме есть Ctrl/Cmd+/, который убирает комменты //. Я бы лучше предусмотрел возможность настройки этого каким-то образом. Но, судя по всему, это вопрос будущего, а пока надо что-то минимальное интегрировать, и поправить баг.

Т.е. голосую за вынос фич в отдельные issue ;-), а тут по минимуму.

upd p.s. Эти issue, по-хорошему, в отдельный проект должны уехать, ибо это вопросы bem-tools как таковых. Но, если я правильно понимаю, замороженные bem-tools нам намекают, что надо писать что-то новое уже используя модули из «модульной сборки». а когда оно появится — хз.

belozer commented 9 years ago

А почему бы не сделать что-то следующего вида?

block('azaza')(
    content()('Your template "azaza" is blank');
)

Из-плюсов:

tadatuta commented 8 years ago

Закрываю в пользу нового bem-tools-create