Closed aliosv closed 7 years ago
Кажется так и должно быть. В чем именно проблема?
https://github.com/awinogradov/enb-postcss/blob/master/techs/enb-postcss.js#L21
проблема в том, что в собранном css будет и b1.css и b1.post.css, т.е. дублирование стилей
Технология работает именно так https://github.com/awinogradov/enb-postcss/blob/master/techs/enb-postcss.js#L14. Ты можешь передать список расширений, который тебе нравится.
На проекте одновременно могут использоваться post.css и css. В этом случае из bem-components получим дубликат стилей(там исходники в post.css и скомпилированный css сразу).
В коде явно написано, что если для бэм-сущности есть post.css - взять его, остальные технологии отфильтровать.
@aliosv ты уже в 3 раз пишешь одно и то же) я понимаю твою боль) но причем тут enb-postcss? Если есть чего предложить, предлагай)
я не пойму где проблема. 1) твои слова противоречат коду, который написан, в этом случае одновременная поставка двух технологий в bem-components - ок. 2) и наоборот, если использовать одновременно разные технологии для одной сущности, то зачем в bem-components дублирование стилей, и в коде написана проверка про post.css, которая сейчас не работает
Во-первых, bem-components никакого отношения к текущему репозиторию не имеет. Все претензии туда. Во-вторых, что тебя останавливает от передачи параметра с единственным расширением? В-третьих, напиши уже чего ты ожидаешь?
что тебя останавливает от передачи параметра с единственным расширением?
использование на проекте обеих технологий
напиши уже чего ты ожидаешь?
ожидал, что при .useFileList(['post.css', 'css'])
из b1.post.css и b1.css будет использоваться только первый
keep just first of b1.post.css and b1.css
этот комментарий означает брать только post.css если есть b1.post.css и b1.css, или брать только первые файлы для обеих технологий? В первом случае - не работает, во втором случае - зачем нужна эта фильтрация(что и сбивает с толку), если не может быть двух одинаковых файлов?
ожидал, что при .useFileList(['post.css', 'css']) из b1.post.css и b1.css будет использоваться только первый
Все enb технологии работают не так. Они принимают на вход список всего и клеют/обрабатывают/что угодно. Ничем не запрещено написать и css и post.css для одной сущности с разным содержимым. В твоих ожиданиях то что будет в css не приедет никогда.
топчемся на месте
Все enb технологии работают не так. Они принимают на вход список всего и клеют/обрабатывают/что угодно.
верно, ожидаемое поведение - нестандартная логика
Ничем не запрещено написать и css и post.css для одной сущности с разным содержимым.
именно поэтому используются обе технологии одновременно
В твоих ожиданиях то что будет в css не приедет никогда.
именно, т.е. для сущности должен быть или css или post.css. Это решает проблему с bem-components(сделай bower install bem-components@5.0.0 и посмотри на сорцы в папке design, поймешь суть проблемы).
Допустим, наличие в bem-components файлов post.css и css с ОДИНАКОВЫМ содержимым их багой/фичей, тогда зачем тут написан этот код? https://github.com/awinogradov/enb-postcss/blob/master/techs/enb-postcss.js#L21-L38
именно, т.е. для сущности должен быть или css или post.css.
Нет, это необязательно. У меня может быть еще рядом ie.css, ie9.css, kostyl.css и все это надо склеить и обработать. Матчится на post.css и игнорить css не верно. Как и не верно, что только одна технология css на одну конкретную сущность. Вероятно этот код был добавлен с подобной целью, но лучше спросить у автора https://github.com/awinogradov/enb-postcss/pull/25/commits/6a82eec75879ac4007ab395b9939bfbcc9ed53cb @tadatuta
Но еще ты можешь настроить в сборке не одну технологию enb-postcss, а целых 2, 3, 4 или сколько угодно еще. В одной обработывать один набор расширений, а в другой любой другой. Как и, видимо, совершенно не обязательно .css обрабатывать с помощью enb-postcss в твоем случае. Есть целый набор других технологий про это https://github.com/enb/enb-css.
в указанном коммите https://github.com/awinogradov/enb-postcss/pull/25/commits/6a82eec75879ac4007ab395b9939bfbcc9ed53cb как раз пропускается только один **.css из всех возможных, дальше эта логика ломается https://github.com/awinogradov/enb-postcss/commit/c966903eadd238c0b3b33235e4b08f00ef971e03 и весь блок фильтрации списка файлов становится бесполезным
@tadatuta, проясни пожалуйста ситуацию.
@awinogradov ох, таки да, ожидалось, что захавается только первый найденный суффикс. в мире gulp-а в итоге это решается отдельным плагином https://github.com/tadatuta/gulp-one-of
Здесь нужно додумать. Проблема на самом деле критичная.
как вариант:
upd. плохо, теряется порядок
Как по мне таки надо просто поставлять в npm/bower bem-components в css only. Никто же не раздает написаное на es6 в исходниках. А если мне надо я иду на гитхаб. Технически сейчас enb-postcss работает верно и тот код можно удалить.
Как я понял, они делают поставку сорцов из-за rebem-css. Я бы избавился от собранного css, или, если оставлять, то логично компилировать в двух вариантах нейминга, не так ли?
upd. поставлять в dist - оба варианта нейминга, в bower - только сорцы
Нет, логично оставить скомпилированный css. Если нужно что-то кастомное тащи с гитхаба. Что делать с неймингом не знаю. Вове виднее. А еще мне кажется можно это ишью перенаправить в другой репозиторий)
Поставка в исходниках не будет работать корректно еще и из-за наличия кастомных плагинов postcss. Это обязательное требование перед использованием. Из коробки не заведется.
Технически сейчас enb-postcss работает верно и тот код можно удалить.
На самом деле вопрос не такой уж однозначный. enb-stylus
всегда работал именно в режиме one-of (см. https://github.com/enb/enb-stylus/blob/master/techs/stylus.js#L156-L198) и переход на postCSS предполагал, что это поведение сохранится.
Что и было реализовано в моем PR, а потом с очередным минором это поведение было изменено.
При этом я понимаю, что есть валидные кейсы, когда нужны все суффиксы и фильтровать безусловно, пожалуй, не выход.
Предлагаю добавить опцию oneOfSourceSuffixes
, которая бы получала массив либо массив массивов.
Например, конфиг
{
sourceSuffixes: ['post.css', 'ie.post.css', 'styl', 'ie.styl', 'css', 'ie.css'],
oneOfSourceSuffixes: [['post.css', 'styl', 'css'], ['ie.post.css', 'ie.styl', 'ie.css']]
}
означает, что для исходной структуры вида
b1/
b1.post.css
b1.styl
b1.css
b1.ie.post.css
b1.ie.styl
b1.ie.css
в сборку попадут только b1.post.css
и b1.ie.post.css
.
По умолчанию oneOfSourceSuffixes
не задано, т.е. получаем стандартное поведение, а в случае использования позволяет выразить любое произвольное поведение.
@awinogradov, если тебе ок, готов запилить PR.
@tadatuta звучит логично, давай сделаем
При этом я понимаю, что есть валидные кейсы, когда нужны все суффиксы и фильтровать безусловно, пожалуй, не выход.
если делать oneOfSourceSuffixes, тогда ломается порядок блоков, т.к. придется клеить из двух потоков.
Предлагаю: 1) oneOfSourceSuffixes не делать, это позволит сохранить порядок блоков при сборке 2) разделить сорцы на разные уровни в исходном пакете, подключая нужный в make файле. Порядок сущностей сохраняется, + доступны все прежние фичи: post-css для кастомного нейминга/возможно скорости, и css для несовместимого процессора на проекте.
Это не повлияет на порядок. Файлы приходят в одном потоке и будут обработаны последовательно через фильтр. Вова пришлёт PR посмотрим. Решение хорошо тем, что не влияет на дефолтное поведение и параметром позволяет кастомизировать список технологий. Плюс доп телодвижений для компонентов не надо. Но я бы завёл ишью в компоненты на доделку дистрибьюции в пользу скомплиненных стилей. Пожалуй я и заведу:)
Мы совершенно сознательно поставляем сорцы ради кастомного нейминга. А порядок таки сохранится, да.
@tadatuta давай про компоненты тут https://github.com/bem/bem-components/issues/1994
разобрались, так порядок сохраняется
lib/
b1/
b1.css
b1.post.css
proj/
b1/ - вот тут должно быть что-то одно: css или post.css
b1.css
b1.post.css
причина https://github.com/awinogradov/enb-postcss/blob/master/techs/enb-postcss.js#L27
https://github.com/awinogradov/enb-postcss/blob/master/techs/enb-postcss.js#L31 фильтрация не происходит, т.к. basename равен .../file.post и .../file соответственно