Сплю такой, красивые девки снятся. А какой-то голос из далека хриплым баритоном:
- CSS трас.. Выпей яду! Deps - хромота. Думалось показалось а потом снова:
- Там есть BEM! Тяни в Deps! Ну тут и девки уже куда-то растворились.
Проснулся, поймал мысль.
А суть вот в чем: Писать deps часто приходится из-за css по большей части чем из-за всего остального. Если из ymodules и прочего модульного зависимости можно вытянуть легко, то css остается не удел.
А вроде бы и сделать-то всего ничего - распарсить css посредством https://github.com/reworkcss/css, да или чем по проще. Взять названия классов и прогоняя через https://ru.bem.info/tools/bem/bem-naming/ Сформировать deps/decl и мерджить с тем что взято из js.
Ну пока мысль дошла до логического конца подумалось мне, что уже по любому это сделали.
Может кто расколится, кто делал? Чего не засветил? Какие проблемы?
Этот вопрос поднимается с завидной регулярностью. Короткий ответ такой: хотим, думаем, но это весьма нетривиальная история.
Во-первых, каждый раз парсить сорцы и обходить AST в поисках депендов — это дорого. А в сложных случаях — практически невозможно (скажем, когда сущности появляются в шаблонах в зависимости от ответа бекенда). Во-вторых, просто получить списков сущностей не достаточно — нужно еще управлять порядком. В-третьих, даже
ym
не дает возможности выразить зависимости от модификаторов.Ну а что, если не AST? Просто регулярочка мы ведь про css говорим? Ну а в частности про классы вида
\.[a-z-]_[a-z0-9\-]
\.[a-z-]__[a-z0-9\-]_[a-z0-9\-]
Добить плагинчик к enb - надо используй не надо не используй. В ym да, с модификаторами сложно, тут уж точно не тривиальная задачка.
Но как минимум для css, то можно решить по проще.
С CSS все действительно просто, но 1) Скорее всего вместо CSS используется препроцессор и регекспы не спасут (но это тоже плюс-минус просто решается) 2) Зависимостей на уровне CSS не так-то много на самом деле 3) Не очень-то понятно, какой профит, если все равно потребуется депсы для остальных технологий
Я почти уверен, что вы хотите линтер для зависимостей с возможностью
--fix
, просто пока не понимаете этого. В т.ч. и для CSS.@zxqfox Кстати возможно. Но цель - автоматизировать зависимости из области
shouldDeps
иmustDeps
Может стоит как-то по другому сделать? Может эти вещи вынести на уровень инструментария, типа в bem-tools.
@tadatua тут все на постпроцессоры переходят, но и они в конце генерируют css, с которого уже можно брать deps
@zxqfox у меня даже пара вариантов прототипов на эту тему есть преклонного возраста ;) https://github.com/tadatuta/bem-deps-lint https://github.com/tadatuta/bem-deps-parser
@pavelpower давай пофантазируем: представь, что есть такой модуль, который действительно умеет почитать стили даже с учетом пре/постпроцессоров и выдать список упомянутых в них БЭМ-сущностей. Попробуй умозрительно оценить, чем это тебе поможет на твоем текущем проекте. Предположу, что профит будет близок к нулю, т.к. сколько-нибудь полезные в плане майнинга зависимостей стили окажутся в листьях, а не в корне графа.
я тоже предположу что профита будет мало на реальном проекте. Ну правда что ли сложно написать депсы? Это же нужно один раз... и ничем не отличается от того же require который мы всегда пишем в обычном коде, но почему то его мы не хотим автоматом подставлять...
Вот бы депсы на yml допилить - это бы упростило жизнь. Хотя бы для блоков, в которых нет зависимостей по технологиям.
@kompolom депсы на yml где пилят?
@ilyar https://github.com/enb-bem/enb-bem-techs/blob/master/docs/api.ru.md#deps Но они не работают ))