awesome-everything EN
↑ Обратно к восхождению

Архитектура фронтенда

Monorepo: обзор с выбором ответа

Суть Синтез по всему юниту про monorepo в формате выбора: граф зависимостей, affected-детекция, ключи remote cache, границы модулей и трейдофф monorepo против polyrepo.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов, проходящих через весь юнит. Каждый отражает решение, которое ты принимаешь на реальном 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.

Продолжить восхождение ↑Monorepo: обзор по памяти
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.