Проект Ledger Live Monorepo: Часть 2. Инструменты (заставьте его сиять) | Леджер

Проект Ledger Live Monorepo: Часть 2 – Инструменты (заставьте его сиять) | Леджер

Исходный узел: 2985172

Вторая запись из серии постов в блоге «Проект Ledger Live Monorepo», в которой разработчик Ledger рассказывает нам историю огромной миграции кодовой базы Ledger Live в монорепозиторий. Если вы пропустили первую часть, посмотрите ее здесь:

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

Ведение нескольких проектов

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

  • NPM (имеет поддержку рабочих пространств, но есть лучшие альтернативы),
  • Пряжа 1 (становясь слишком старыми, появляются лучшие и более эффективные альтернативы),
  • Пряжа ≥ 2 (интересная идея, но plug n play поддерживается не везде, особенно в React Native),
  • ПНПМ (символические ссылки, созданные с учетом рабочих пространств, экономичные по диску).

Посмотрев на все это, мы решили пойти с ПНПМ для:

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

На бумаге ПНПМ это абсолютная жемчужина, но правильно настроить символические ссылки было немного странно (опять же, особенно с React Native).

Итак, наш выбор был сделан, мы бы выбрали ПНПМ.

Оркестровка сценариев

Даже если ПНПМ добавляет все больше и больше оркестрации к своим функциям, но по-прежнему не охватывает всего, что мы хотели сделать, например:

  • последовательные сборки,
  • кэширование.

Для этого мы нашли двух интересных претендентов, на которых нам нужно было обратить внимание:

  • NX (от угловой команды),
  • Турборепо (который только что анонсировал версию 1.0.0, когда мы начали над ней работать и сейчас работаем с командой Vercel).

Мы проверили концепцию обоих вариантов.

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

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

Даже если Турборепо имел меньше функций, чем NX, он сделал две вещи, которые мы искали:

  • Оркестрация сборок с учетом дерева зависимостей (и параллельных сборок),
  • Кэширование (сборки кэшируются и «воспроизводятся», если их код не изменился).

Это, плюс возможность легкого входа/выхода, заставило нас выбрать новичка в квартале, ТурбоРепо.

Versioning

Мы также рассмотрели несколько решений, но в конечном итоге решили использовать https://github.com/changesets/changesets поскольку это был один из инструментов, рекомендованный TurboRepo, и после небольшого чтения документации он, похоже, соответствовал нашим потребностям.

Разработчикам придется быть немного более строгими в процессе разработки и предоставлять changesets (файл, описывающий, в какой библиотеке изменяется их код, степень серьезности соответствует Семвер соглашение и описание изменения). Эти changesets затем используются для автоматического обновления версий пакетов с учетом заданной серьезности, а также для автоматизации создания Информация об изменениях. Кроме того, инструменты позволяют pre release режиме, 🍒 на 🍰.

Что дальше?

Определившись с инструментами, пришло время приступить к работе. В следующей статье блога мы поговорим о системе сборки и обо всех dev-ops/автоматизации/непрерывной интеграции в контексте монорепозитория.


Валентин ДЕ АЛМЕЙДА
Опыт разработчиков и основные технологии – Ledger Live

Отметка времени:

Больше от Ledger