Нет, потребуется переопределить ближайший «слот», о котором позаботился разработчик при проектировании компонента. Если он заранее догадался, что потребуется менять кнопочку, то можно будет именно ее и переопределить через реестр. Иначе — ближайшего родителя, доступного в реестре.
На самом деле у нас много репозиториев, построенных по схеме монорепы и управляются с помощью lerna, поэтому за обновление версий пакетов каждого из множества монореп отвечает lerna и скрипты, которые написаны поверх нее.
В целом схема в CI такая:
1. Открытие pull request-а в репозиторий с общим кодом автоматически выпускает canary-версию затронутых пакетов
2. Во все проекты, где используется затронутый пакет, автоматически отправляется pull request с обновлением package.json и package-lock.json до версии, выпущенной в п. 1
3. Эти pull request-ы триггерят запуск тестов в затронутых репозитория
4. Отчеты по этим тестам публикуются в исходный pull request из п. 1. Если там упали обязательные проверки, влиться не получится
5. Если все проверки прошли успешно и разработчик вмержил изменения, автоматически будет выпущена стабильная версия общего пакета, а pull request-ы в проекты обновятся на использование этой стабильной версии. Так что разработчикам останется только их влить.
В Лего сейчас именно так. На проектах — по-разному. Для мира i-bem четкая структура важна, а для Реакта с явными импортами код может лежать как решит каждая конкретная команда и зачастую принимают решение все-таки держать код на Реакте отдельно, но импортировать стили/тесты из тех же desktop.blocks/**
Мы достаточно много экспериментировали с «магической» сборкой, которая также, как и в МАМ, не требовала указания явных импортов. В частности такой подход позволил очень удобно работать с уровнями переопределения. Но сейчас скорее движемся в сторону «явное лучше неявного» и возвращаемся к классическим импортам, которые хотя и заставляют писать больше бойлерплейта, зато делают код более очевидным, не требующим знать о соглашениях, чтобы с ним разобраться.
Конец немного предсказуем. Где-то с середины статьи было такое чувство, что в ней будет раскрыт и этот вопрос. Так и вышло.
Серверный рендеринг позволяет пользователям получать результат быстрее: не тащить на клиент шаблоны, не ждать пока они отработают, а сразу получить готовую HTML-разметку, которую можно начинать отрисовывать в браузере даже еще до того, как она полностью загрузится.
Ну даже не знаю… :)
Я же правильно понимаю, что приведенный сниппет кода должен ярко иллюстрировать ущербность БЭМа?
Она в том, что
1. Среди возможностей есть по-настоящему асинхронная во всех смыслах модульная система, позволяющая при необходимости точечно переопределять любые модули (стоит ли говорить, что ее использование опционально и БЭМ не перестанет быть БЭМом без нее?)
2. Помимо возможности декларативно описать реакцию на изменение модификаторов, можно воспользоваться и соответствующими событиями, которые обладают всеми возможностями нативных событий.
3. При необходимости отменить поведение события по умолчанию, нужно (о мой б-г!) вызвать preventDefault().
4. В hello-world примере не стали задвигать телегу про единый источник истины, докручивать флакс с привкусом редакса и прочие свистелки, которые каждый имеющий голову разработчик выбирает для себя сам и которые не имеют прямого отношению к тем вещам, за которые отвечает БЭМ.
Утверждение примерно в духе «с Windows явно что-то не так, и это не только необходимость перезагружаться при установке обновлений, иначе не было бы столько холива».
Тот факт, что про холивары про БЭМ не утихают во фронтенде ТАК долго уже о чем-то да говорит. Сколько технологий родилось, поднялось на волне хайпа и было забыто, пока нас ругают за читабельность кода, а потом пишут комментарии в духе habrahabr.ru/company/htmlacademy/blog/337286/#comment_10428564? ;)
Как вы решаете задачу, чтобы кнопка могла быть использована в совершенно любом контексте, могла иметь опциональное активное состояние и при этом, будучи конкретно в пункте меню, обладала определенными отступами от контейнера? Каждый раз создаете лишние DOM-узлы?
Парадокс в том, что читать верстку, написанную с соблюдением БЭМ несравнимо удобнее. Стоит только начать, вернуться назад желания уже не возникнет.
Нет проектов с более, чем 2-мя верстальщиками
Это еще одно заблуждение. Даже одному писать код по единым понятным правилам намного проще, чем каждый раз придумывать новое решение, конфликтующее с предыдущим.
Дальше все полностью аналогично деплою совершенно типичного сайта на express. В простом случае подойдет какой-нибудь pm2 или аналог, чтобы следить, что процесс жив и добавить его в автозагрузку для переподнятия после рестарта сервера. Плюс мониторинги и прочая безопасность по вкусу.
Удивился, если бы увидел завтра статьи на тему — «прощай angular, здравствуй бэм», " бэм vs react", «создателя redux уличили в подготовки покушения на создателя бэм»
Полагаю, что ваши обманутые ожидания происходят из-за того, что в Яндексе под «разработкой интерфейсов» понимают именно front-end, а UX и «красоту» относят к дизайну.
Скорее всего причина историческая: в какой-то период времени в компании не было своих дизайнеров (макеты рисовала Студия), но были отдельные люди, которые занимались бекендом, были HTML-верстальщики и те самые разработчики интерфейсов — те, кто превращал сверстанную статику в живой сервис.
Прошедшая Мобилизация была гораздо шире, там присутствовал дизайн, как отдельная «школа», но ШРИ, как и в Симферополе, затрагивала лишь программирование front-end-а.
Есть подозрение, что под словом «БЭМ» вы понимаете что-то свое, если противопоставляете компонентному подходу.
На bem.info в «Основных понятиях» сказано буквально следующее: «Блок — логически и функционально независимый компонент страницы, аналог компонента в Web Components. Блок инкапсулирует в себе поведение (JavaScript), шаблоны, стили (CSS) и другие технологии реализации.»
Подробнее о том, как работает bem-react/di можно посмотреть в докладе verybigman www.youtube.com/watch?v=nhgC_43C38Q
В целом схема в CI такая:
1. Открытие pull request-а в репозиторий с общим кодом автоматически выпускает canary-версию затронутых пакетов
2. Во все проекты, где используется затронутый пакет, автоматически отправляется pull request с обновлением package.json и package-lock.json до версии, выпущенной в п. 1
3. Эти pull request-ы триггерят запуск тестов в затронутых репозитория
4. Отчеты по этим тестам публикуются в исходный pull request из п. 1. Если там упали обязательные проверки, влиться не получится
5. Если все проверки прошли успешно и разработчик вмержил изменения, автоматически будет выпущена стабильная версия общего пакета, а pull request-ы в проекты обновятся на использование этой стабильной версии. Так что разработчикам останется только их влить.
desktop.blocks/**
Серверный рендеринг позволяет пользователям получать результат быстрее: не тащить на клиент шаблоны, не ждать пока они отработают, а сразу получить готовую HTML-разметку, которую можно начинать отрисовывать в браузере даже еще до того, как она полностью загрузится.
Я же правильно понимаю, что приведенный сниппет кода должен ярко иллюстрировать ущербность БЭМа?
Она в том, что
1. Среди возможностей есть по-настоящему асинхронная во всех смыслах модульная система, позволяющая при необходимости точечно переопределять любые модули (стоит ли говорить, что ее использование опционально и БЭМ не перестанет быть БЭМом без нее?)
2. Помимо возможности декларативно описать реакцию на изменение модификаторов, можно воспользоваться и соответствующими событиями, которые обладают всеми возможностями нативных событий.
3. При необходимости отменить поведение события по умолчанию, нужно (о мой б-г!) вызвать
preventDefault()
.4. В hello-world примере не стали задвигать телегу про единый источник истины, докручивать флакс с привкусом редакса и прочие свистелки, которые каждый имеющий голову разработчик выбирает для себя сам и которые не имеют прямого отношению к тем вещам, за которые отвечает БЭМ.
Все верно? Ничего не упустил? :)
Тот факт, что про холивары про БЭМ не утихают во фронтенде ТАК долго уже о чем-то да говорит. Сколько технологий родилось, поднялось на волне хайпа и было забыто, пока нас ругают за читабельность кода, а потом пишут комментарии в духе habrahabr.ru/company/htmlacademy/blog/337286/#comment_10428564? ;)
Парадокс в том, что читать верстку, написанную с соблюдением БЭМ несравнимо удобнее. Стоит только начать, вернуться назад желания уже не возникнет.
Это еще одно заблуждение. Даже одному писать код по единым понятным правилам намного проще, чем каждый раз придумывать новое решение, конфликтующее с предыдущим.
Зависит от отдела == опыта команды и требований.
Там ровно ноль связи с i-bem и каким-либо легаси ;)
На самом деле всё чуть-чуть иначе: БЭМ в симбиозе с React, мастер-класс по внедрению возможностей БЭМ в проекта на redux и так далее.
А что именно осталось непонятным после прочтения статьи? Мы бы с удовольствием дополнили и/или упростили.
Скорее всего причина историческая: в какой-то период времени в компании не было своих дизайнеров (макеты рисовала Студия), но были отдельные люди, которые занимались бекендом, были HTML-верстальщики и те самые разработчики интерфейсов — те, кто превращал сверстанную статику в живой сервис.
Прошедшая Мобилизация была гораздо шире, там присутствовал дизайн, как отдельная «школа», но ШРИ, как и в Симферополе, затрагивала лишь программирование front-end-а.
Например, BEMHTML.
На bem.info в «Основных понятиях» сказано буквально следующее: «Блок — логически и функционально независимый компонент страницы, аналог компонента в Web Components. Блок инкапсулирует в себе поведение (JavaScript), шаблоны, стили (CSS) и другие технологии реализации.»