(Monorepo + Lerna + Nx + Yarn Workspace)
Что такое монорепо?
Монорепозиторий — это единый репозиторий, содержащий несколько отдельных проектов с четко определенными связями. Это архитектурная концепция, в которой вы храните все свои изолированные фрагменты кода в одном суперрепозитории вместо того, чтобы управлять несколькими меньшими репозиториями.
Общие заблуждения о монорепозиториях
Монорепозитории во многом отличаются от монолитов. Так что недостатки монолитов не применимы к монорепозиториям.
Это общие заблуждения о монорепозиториях -
- Релизы будут идти вместе для всех проектов
- Это позволяет другим командам изменять мой код без моего ведома.
- Это приводит к созданию сложной кодовой базы и сложности в отладке.
- Это один большой репозиторий кода, поэтому обслуживание будет затруднено и усложнит его.
Существует несколько инструментов для управления монорепозиториями:
Базель, Градл, Лаге, Лерна, Нкс, Раш. Я использовал Lerna для своего проекта, поэтому расскажу об этом.
Как мы настраиваем и управляем монорепозиторием?
Управление монорепозиториями с помощью Lerna -
Lerna — это монорепозиторий для интерфейсных проектов.
Он решает три самые большие проблемы монорепозиториев JavaScript:
- Кэширование локальных вычислений — возможность сохранять и воспроизводить файл, а также обрабатывать выходные данные задач. На одной и той же машине вы никогда не будете создавать или тестировать одно и то же дважды.
2. Оркестровка локальных задач — возможность запускать задачи в правильном порядке и параллельно. Все перечисленные инструменты могут делать это примерно одинаково, кроме Lerna, который более ограничен.
3. Анализ рабочей области — Возможность понять график проекта рабочей области без дополнительной настройки.
4. Визуализация графика зависимостей — Визуализируйте отношения зависимости между проектами и/или задачами. Визуализация является интерактивной, что означает, что вы можете искать, фильтровать, скрывать, фокусировать/выделять и запрашивать узлы на графике.
Недостатки монорепо:
- Мы не можем поделиться определенной частью проекта, поэтому необходимо предоставить доступ к полному репозиторию, что может привести к проблемам с безопасностью.
2. Большее время сборки в CI/CD
Использование Yarn Workspaces с lerna
Lerna и Yarn Workspaces дают нам возможность создавать библиотеки и приложения в монорепозитории, не заставляя нас публиковать их в npm или других реестрах. Мы можем намного быстрее проходить циклы код-тест-отладка, разделяя компоненты локально.
Lerna & Yarn Workspaces ожидает папку с именем packages
в вашем репозитории. Пакет — это просто «мини-репозиторий», который можно создавать, создавать и публиковать независимо друг от друга. Версии пакетов могут быть одинаковыми или разными.
У нас может быть любое количество пакетов внутри монорепозитория со сложными зависимостями между собой. Секретом управления этими зависимостями является концепция символических ссылок.
Что такое Симлинк?
В вычислительной технике символическая ссылка (сокращение от Symbolic Link) — это файл, который ссылается на другой файл или каталог и делает его похожим на то, что указанный файл или каталог находится в исходном местоположении файла.
Ключом к lerna и рабочему пространству является конфигурация файла lerna.json. как только он установлен, мы можем запустить следующие команды
- пряжа — установить зависимости
- сборка пряжи — это запустит следующую команду, определенную в файле 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 .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.