Введение
Монорепозитории сейчас популярны, особенно среди веб-разработчиков. Мы создали этот ресурс, чтобы помочь разработчикам понять, что такое монорепозитории, какие преимущества они могут принести, а также инструменты, которые сделают разработку монорепозиториев восхитительной.
Есть много отличных инструментов монорепозитория, созданных отличными командами с разными философиями. Мы делаем все возможное, чтобы представить каждый инструмент объективно, и мы приветствуем пул-реквесты, если у нас что-то не так!
Мы сосредоточимся на следующих инструментах: Bazel (от Google), Gradle Build Tool (от Gradle, Inc), Lage (от Microsoft), Lerna, Nx (от Nrwl), Брюки (от сообщества Pants Build), Rush (от Microsoft) и Turborepo (от Vercel). Мы выбрали эти инструменты из-за их использования или признания в сообществе веб-разработчиков.
Что такое монорепозиторий?
Монорепозиторий — это единый репозиторий, содержащий несколько отдельных проектов с четко определенными отношениями.
Рассмотрим репозиторий с несколькими проектами в нем. У нас есть «colocation», но если между ними нет четко определенных отношений, мы бы не назвали это монорепозиторием.
Точно так же, если репозиторий содержит массивное приложение без разделения и инкапсуляции отдельных частей, это просто большое репо. Вы можете дать ему причудливое имя, например «garganturepo», но, к сожалению, это не монорепозиторий.
На самом деле такое репозиторий непозволительно монолитно, и это часто первое, что приходит на ум, когда люди думают о монорепозиториях. Продолжай читать; вы увидите, что хороший монорепозиторий — это противоположность монолитному.
✋ Монорепо ≠ Монолит
Хороший монорепозиторий — это противоположность монолитному! Подробнее об этом и других заблуждениях читайте в статье Заблуждения о монорепозиториях: монорепозитории != монолит».
Но почему?
Давайте углубимся в кроличью нору.
— Никаких дополнительных затрат на создание новых проектов
Используйте существующую настройку CI и не нужно публиковать версии пакетов, если все потребители находятся в одном репозитории.
— Атомарные коммиты по проектам
Все работает вместе при каждом коммите. Критических изменений не бывает, когда вы исправляете все в одном коммите.
— Одна версия всего
Не нужно беспокоиться о несовместимости из-за того, что проекты зависят от конфликтующих версий сторонних библиотек.
— Мобильность разработчиков
Получите согласованный способ создания и тестирования приложений, написанных с использованием различных инструментов и технологий. Разработчики могут с уверенностью вносить свой вклад в приложения других команд и проверять безопасность своих изменений.
Какие инструменты монорепозитория должны предоставлять?
У монорепозиториев много преимуществ, но чтобы заставить их работать, нужны правильные инструменты. По мере роста вашего рабочего пространства инструменты должны помочь вам сделать его быстрым, понятным и управляемым.
Дело не только в характеристиках.
Характеристики имеют значение! Такие вещи, как поддержка распределенного выполнения задач, могут изменить правила игры, особенно в больших монорепозиториях. Но есть и другие чрезвычайно важные вещи, такие как эргономика разработки, зрелость, документация, поддержка редактора и т. д. Мы не рассматриваем их здесь, потому что они более субъективны.
Вы можете найти, скажем, Lage более приятным в использовании, чем Nx или Bazel, хотя в некоторых отношениях он менее эффективен.
Некоторые функции легко добавить, даже если данный инструмент их не поддерживает (например, генерация кода), а некоторые добавить на самом деле невозможно (например, распределенное выполнение задач).
Много решений для разных целей
Каждый инструмент соответствует определенному набору потребностей и предоставляет вам определенные функции.
В зависимости от ваших потребностей и ограничений мы поможем вам решить, какие инструменты лучше всего вам подходят.
Bazel (от Google)
«Быстрая, масштабируемая, многоязычная и расширяемая система сборки».
Gradle (от Gradle, Inc.)
«Быстрая и гибкая система сборки полиглотов, предназначенная для многопроектных сборок».
Lage (от Microsoft)
«Создание задач в монорепозиториях JS»
Лерна (поддерживается Nrwl)
«Инструмент для управления проектами JavaScript с несколькими пакетами».
Nx (от Nrwl)
«Система сборки следующего поколения с первоклассной поддержкой монорепозиториев и мощной интеграцией».
Брюки (от Pants Build)
«Быстрая, масштабируемая и удобная система сборки для кодовых баз любого размера».
Rush (от Microsoft)
«Рассчитан на большие монорепозитории с большим количеством команд и проектов. Часть семейства проектов Rush Stack».
Turborepo (от Vercel)
«Высокопроизводительная система сборки для кодовых баз JavaScript и TypeScript».
Ресурсы
Вот список полезных видео и подкастов, чтобы углубиться или увидеть информацию по-другому.
- SyntaxFM #426: монорепозитории! Workspaces, pnpm, turborepo и многое другое!
- Monorepos — как профессионалы масштабируют огромные программные проекты
- Nx: инструменты монорепозитория уровня Google для всех — Джефф Кросс и Виктор Савкин
- Демонстрация и прохождение Turborepo (высокопроизводительные монорепозитории)
- Монорепос: Любой размер подходит всем, Алтан Сталкер
- БазелКон 2021 (Плейлист)
- NxConf 2021 (Плейлист)
- NxConf Lite 2022 (Плейлист)
- Подкасты о штанах
Статьи из монорепозитория
Вот тщательно отобранный список статей о монорепозиториях, которые в значительной степени поддержат то, что вы только что узнали.
- Правило одной версии — opensource.google
- Почему TurboRepo станет первым большим трендом 2022 года
- Создавайте монорепозитории, а не монолиты
- Lerna 5.1 — Новый веб-сайт, новые руководства, новый репозиторий с примерами Lerna, поддержка распределенного кэширования и скорость!
- Документация монорепозитория Nx
- Статьи о брюках
Заключение
В заключение можно сказать, что монорепозитории представляют собой замечательную инновацию в области разработки программного обеспечения, предлагающую множество преимуществ, включая простоту создания новых проектов, атомарные фиксации, унифицированные версии и повышенную мобильность разработчиков. Крайне важно развеять заблуждение о том, что монорепозиторий эквивалентен монолиту, поскольку суть хорошо продуманного монорепозитория заключается в его точном противопоставлении монолитным структурам.
При выборе подходящего инструмента, будь то Bazel, Gradle, Lage, Lerna, Nx, Pants, Rush или Turborepo, следует руководствоваться конкретными потребностями и целями вашего проекта. Каждый инструмент оснащен уникальным набором возможностей для поддержки управления монорепозиториями, что делает среду эффективной и управляемой.
Помните, что внедрение монорепозитория — это не просто использование новой технологии или инструмента — это изменение всей организационной структуры. Изменяя подход к кодированию, созданию проектов, крупномасштабному рефакторингу, совместному использованию кода и совместной работе, монорепозитории открывают возможности для повышения общей эффективности и производительности. Тем не менее, этот сдвиг требует глубокого понимания монорепозиториев, тщательного выбора инструментов и стратегического планирования — все это призвано помочь вам в этой статье.
Примите сложность, используйте предоставленные ресурсы и начните трансформационный путь к эффективной и оптимизированной среде разработки с монорепозиториями. Ваша организация выиграет от силы и потенциала, которые предлагает этот подход.