#frontend #monorepo
Вопрос:
Вот некоторые из моих текущих мыслей, но я также хотел бы понять, как сообщество делает это сейчас
Используйте кэширование для сокращения времени сборки
Мотивация
В настоящее время каждый раз, когда вы что-то меняете в библиотеках, кто-то другой должен сделать initialize
это снова, когда вы будете проходить через git. Если вы знаете, в каком пакете он находится, вы можете просто запустить initialize
команду для указанного пакета. Если вы не знаете, вам нужно запустить корневую initialize
команду, которая на самом деле работает очень медленно, потому что она повторно запускает все пакеты npm, содержащие intialize
команду, независимо от того, изменились они или нет.
- сократите время инициализации и улучшите опыт совместной разработки
- поддержка кэширования ci/cd созданных библиотек для ускорения времени сборки
Текущее состояние
lerna run
- Первая инициализация нового проекта 198.54 s
- Повторная инициализация для не новых проектов 90,17 с
Требования
- Выполняйте команды как можно одновременно в соответствии с графиком зависимостей и реализуйте кэширование на основе изменений git
- Выполнение команд в модулях, определяющих зависимости модулей
- Выполнять команды во всех подмодулях
Идеи реализации
api lerna в настоящее время серьезно недокументирован: https://github.com/lerna/lerna/issues/2013
- сканируйте lerna.json для всех модулей
- выполняйте указанные команды параллельно, насколько это возможно, в соответствии с зависимостями
- проверьте git при выполнении команды, чтобы узнать, нужно ли ее пропускать
Схема: https://photos.app.goo.gl/aMyaewgJxkQMhe1q6
- Ультра-раннер уже существует, так что, возможно, лучше поддерживать эту функцию на его основе
- Похоже, что нет никакой поддержки для выполнения команд, кроме как
build
в данный момент, см.: https://github.com/folke/ultra-runner/issues/224
- Похоже, что нет никакой поддержки для выполнения команд, кроме как
Известные решения
- Пытаюсь использовать Microsoft rush-в надежде на лучшее решение без замены основного фреймворка lerna yarn
Комментарии:
1. Наконец, я создал свой собственный плагин, используя api плагинов yarn2, чтобы завершить эту работу, обратитесь к: github.com/rxliuli/liuli-tools/tree/master/libs/…