(Monorepo + Lerna + Nx + Yarn Workspace)

Что такое монорепо?

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

Общие заблуждения о монорепозиториях

Монорепозитории во многом отличаются от монолитов. Так что недостатки монолитов не применимы к монорепозиториям.

Это общие заблуждения о монорепозиториях -

  • Релизы будут идти вместе для всех проектов
  • Это позволяет другим командам изменять мой код без моего ведома.
  • Это приводит к созданию сложной кодовой базы и сложности в отладке.
  • Это один большой репозиторий кода, поэтому обслуживание будет затруднено и усложнит его.

Существует несколько инструментов для управления монорепозиториями:

Базель, Градл, Лаге, Лерна, Нкс, Раш. Я использовал Lerna для своего проекта, поэтому расскажу об этом.

Как мы настраиваем и управляем монорепозиторием?

Управление монорепозиториями с помощью Lerna -

Lerna — это монорепозиторий для интерфейсных проектов.

Он решает три самые большие проблемы монорепозиториев JavaScript:

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

2. Оркестровка локальных задач — возможность запускать задачи в правильном порядке и параллельно. Все перечисленные инструменты могут делать это примерно одинаково, кроме Lerna, который более ограничен.

3. Анализ рабочей области — Возможность понять график проекта рабочей области без дополнительной настройки.

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

Недостатки монорепо:

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

2. Большее время сборки в CI/CD

Использование Yarn Workspaces с lerna

Lerna и Yarn Workspaces дают нам возможность создавать библиотеки и приложения в монорепозитории, не заставляя нас публиковать их в npm или других реестрах. Мы можем намного быстрее проходить циклы код-тест-отладка, разделяя компоненты локально.

Lerna & Yarn Workspaces ожидает папку с именем packages в вашем репозитории. Пакет — это просто «мини-репозиторий», который можно создавать, создавать и публиковать независимо друг от друга. Версии пакетов могут быть одинаковыми или разными.

У нас может быть любое количество пакетов внутри монорепозитория со сложными зависимостями между собой. Секретом управления этими зависимостями является концепция символических ссылок.

Что такое Симлинк?

В вычислительной технике символическая ссылка (сокращение от Symbolic Link) — это файл, который ссылается на другой файл или каталог и делает его похожим на то, что указанный файл или каталог находится в исходном местоположении файла.

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

  1. пряжа — установить зависимости
  2. сборка пряжи — это запустит следующую команду, определенную в файле package.json
lerna exec - babel src -d dist - ignore test.js

Итак, как выглядит конфигурация lerna.json —

{
  "lerna": "1.0.0",
  "packages": [
    "packages/*"
  ],
  "version": "independent",
  "npmClient": "yarn",
  "useWorkspaces": true
}

В Lerna есть два режима публикации пакетов: fixed и independent. При использовании фиксированного режима все пакеты будут опубликованы с использованием одной и той же версии. Выше приведен пример фиксированной версии.

3. запуск пряжи — наконец, соберите приложение и запустите его локально

Тада! Итак, наше веб-приложение Monorepo готово.

Спасибо за прочтение ! 🙂

Использованная литература -





Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.