Aviasales Monorepo
Ну и для начала расскажу чем я сейчас занимаюсь в Авиасейлс, т.к. предыдущий пост Javascript Fatigue напрямую связан с текущей задачей.
Каждый фронтендер в жизни должен обновить все зависимости, написать календарик и построить монорепо. Первые два пункта пройденые этапы в моей жизни, так что да, я делаю монорепозиторий.
Внутренние библиотеки у нас появлялись стихийно и жили в отдельных репозиториях. В определенный момент появился монорепозиторий с гордым названием spaghetti. В общем, помойка для кода. И этой помойкой мы тоже особо не занимались.
В определённый момент жить стало больно: зависимостей много и они устаревают, CI и релиз-процесс везде разный, чтобы внести правку в код нужно сходить аж в 3, если не в 4 репозитория. Решили всё это как-то чинить.
В работе надо монорепозиторием я руководствуюсь двумя принципами.
1. Простота.
Чем проще в настройке и работе монорепозиторий, тем легче нам его поддерживать. Минимум абстракций над инструментами. Никаких gulp-typescript и вот этого вот всего.
2. Скорость.
Быстрее скомпилируется — быстрее окажется в проде. Используем быстрые, но проверенные инструменты. И используем кеш этих инструментов, чтобы не делать работы дважды.
Пока все сходят с ума с Nx и Turborepo и даже Lerna, я решил попробовать построить всё поверх старого доброго yarn workspaces. Тот же Nx плохо укладывается в концепцию простоты. А кеш Nx и Turborepo не панацея, т.к. кешировать инструменты сборки всё ещё нужно — вебпак, тайпскрипт и т.д. Никакой таск-раннер вам это не заменит.
Таким образом задача сводится к нескольким пунктам:
1. Компиляция — тайпскрипт, стили, ассеты и т.д.
2. Связь пакетов между собой — в монорепе живут как абсолютно независимые пакеты, так и те, что зависят друг от друга.
3. Релиз-процесс — CI, бамп версий и ченджлоги.
4. Миграция — перенос кода из отдельных репозиториев в монорепо.
2 и 3 пункты были довольно таки простыми, а вот с компиляцией я основательно так подзастрял.
Ну и для начала расскажу чем я сейчас занимаюсь в Авиасейлс, т.к. предыдущий пост Javascript Fatigue напрямую связан с текущей задачей.
Каждый фронтендер в жизни должен обновить все зависимости, написать календарик и построить монорепо. Первые два пункта пройденые этапы в моей жизни, так что да, я делаю монорепозиторий.
Внутренние библиотеки у нас появлялись стихийно и жили в отдельных репозиториях. В определенный момент появился монорепозиторий с гордым названием spaghetti. В общем, помойка для кода. И этой помойкой мы тоже особо не занимались.
В определённый момент жить стало больно: зависимостей много и они устаревают, CI и релиз-процесс везде разный, чтобы внести правку в код нужно сходить аж в 3, если не в 4 репозитория. Решили всё это как-то чинить.
В работе надо монорепозиторием я руководствуюсь двумя принципами.
1. Простота.
Чем проще в настройке и работе монорепозиторий, тем легче нам его поддерживать. Минимум абстракций над инструментами. Никаких gulp-typescript и вот этого вот всего.
2. Скорость.
Быстрее скомпилируется — быстрее окажется в проде. Используем быстрые, но проверенные инструменты. И используем кеш этих инструментов, чтобы не делать работы дважды.
Пока все сходят с ума с Nx и Turborepo и даже Lerna, я решил попробовать построить всё поверх старого доброго yarn workspaces. Тот же Nx плохо укладывается в концепцию простоты. А кеш Nx и Turborepo не панацея, т.к. кешировать инструменты сборки всё ещё нужно — вебпак, тайпскрипт и т.д. Никакой таск-раннер вам это не заменит.
Таким образом задача сводится к нескольким пунктам:
1. Компиляция — тайпскрипт, стили, ассеты и т.д.
2. Связь пакетов между собой — в монорепе живут как абсолютно независимые пакеты, так и те, что зависят друг от друга.
3. Релиз-процесс — CI, бамп версий и ченджлоги.
4. Миграция — перенос кода из отдельных репозиториев в монорепо.
2 и 3 пункты были довольно таки простыми, а вот с компиляцией я основательно так подзастрял.