Как ускорить сборку интерфейсных монорельсовых проектов?

#frontend #monorepo

Вопрос:

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

Используйте кэширование для сокращения времени сборки

Мотивация

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

  1. сократите время инициализации и улучшите опыт совместной разработки
  2. поддержка кэширования ci/cd созданных библиотек для ускорения времени сборки

Текущее состояние

  • lerna run
    • Первая инициализация нового проекта 198.54 s
    • Повторная инициализация для не новых проектов 90,17 с

Требования

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

Идеи реализации

api lerna в настоящее время серьезно недокументирован: https://github.com/lerna/lerna/issues/2013

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

Схема: https://photos.app.goo.gl/aMyaewgJxkQMhe1q6


  • Ультра-раннер уже существует, так что, возможно, лучше поддерживать эту функцию на его основе

Известные решения

  • Пытаюсь использовать Microsoft rush-в надежде на лучшее решение без замены основного фреймворка lerna yarn

Комментарии:

1. Наконец, я создал свой собственный плагин, используя api плагинов yarn2, чтобы завершить эту работу, обратитесь к: github.com/rxliuli/liuli-tools/tree/master/libs/…