Введение

Монорепозитории сейчас популярны, особенно среди веб-разработчиков. Мы создали этот ресурс, чтобы помочь разработчикам понять, что такое монорепозитории, какие преимущества они могут принести, а также инструменты, которые сделают разработку монорепозиториев восхитительной.

Есть много отличных инструментов монорепозитория, созданных отличными командами с разными философиями. Мы делаем все возможное, чтобы представить каждый инструмент объективно, и мы приветствуем пул-реквесты, если у нас что-то не так!

Мы сосредоточимся на следующих инструментах: 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».

Ресурсы

Вот список полезных видео и подкастов, чтобы углубиться или увидеть информацию по-другому.

Статьи из монорепозитория

Вот тщательно отобранный список статей о монорепозиториях, которые в значительной степени поддержат то, что вы только что узнали.

Заключение

В заключение можно сказать, что монорепозитории представляют собой замечательную инновацию в области разработки программного обеспечения, предлагающую множество преимуществ, включая простоту создания новых проектов, атомарные фиксации, унифицированные версии и повышенную мобильность разработчиков. Крайне важно развеять заблуждение о том, что монорепозиторий эквивалентен монолиту, поскольку суть хорошо продуманного монорепозитория заключается в его точном противопоставлении монолитным структурам.

При выборе подходящего инструмента, будь то Bazel, Gradle, Lage, Lerna, Nx, Pants, Rush или Turborepo, следует руководствоваться конкретными потребностями и целями вашего проекта. Каждый инструмент оснащен уникальным набором возможностей для поддержки управления монорепозиториями, что делает среду эффективной и управляемой.

Помните, что внедрение монорепозитория — это не просто использование новой технологии или инструмента — это изменение всей организационной структуры. Изменяя подход к кодированию, созданию проектов, крупномасштабному рефакторингу, совместному использованию кода и совместной работе, монорепозитории открывают возможности для повышения общей эффективности и производительности. Тем не менее, этот сдвиг требует глубокого понимания монорепозиториев, тщательного выбора инструментов и стратегического планирования — все это призвано помочь вам в этой статье.

Примите сложность, используйте предоставленные ресурсы и начните трансформационный путь к эффективной и оптимизированной среде разработки с монорепозиториями. Ваша организация выиграет от силы и потенциала, которые предлагает этот подход.

Удачного кодинга 🚀