Архитектура фронтенда
Monorepo: обзор с выбором ответа
Шесть вопросов, проходящих через весь юнит. Каждый отражает решение, которое ты принимаешь на реальном CI-пайплайне, — не определение для заучивания, а трейдофф, который надо взвесить, когда очередь на мердж встаёт.
Убедись, что можешь связать граф зависимостей, affected-детекцию, remote cache и границы модулей в одно решение: собирать изменённое и его зависимых, кэшировать остальное и никогда не давать hub-пакету заставлять каждый PR пересобирать весь мир.
Правка одной строки текста на маркетинговой странице висит в CI 41 минуту; пересобрались все 38 проектов. Импорт резолвился через @acme/utils, от которого зависят все приложения и библиотеки. В чём настоящая причина?
Что affected (Nx) / filtered (Turborepo) на самом деле вычисляет для PR, ещё до учёта кэша?
PR отдал устаревшую сборку из remote cache и выпустил баг, хотя hit rate был высоким. Самая вероятная причина?
Почему забытый разработчиком glob во входах задачи приводит к тихому замедлению CI, а не к поломке?
Команда задаёт Nx-теги так, что feature → ui → util — единственное разрешённое направление. Разработчик добавляет импорт из util-библиотеки в feature-библиотеку, и CI падает на линте. Почему это задуманное поведение, а не трение?
Команда из четырёх независимых продуктовых отрядов почти не делит код и общается только по HTTP API. Они выбирают между monorepo и polyrepo. Какая формулировка верна?
Сквозная линия юнита — один пайплайн: граф зависимостей задаёт порядок и радиус взрыва, affected-детекция сужает каждый PR до изменённых проектов плюс их зависимых, remote cache превращает большинство из них в мгновенные попадания — и ключ кэша решает всё, где отсутствующий вход — опасный false hit, а волатильный — расточительный false miss. Ничто из этого не выживает при плохом графе, поэтому выставленные границы модулей (Nx-теги, правило enforce-module-boundaries, package exports) не дают сформироваться hub. А выбор monorepo против polyrepo — про связанность: общий код, меняющийся вместе, — в пользу monorepo; по-настоящему независимые команды — в пользу polyrepo.