Przeniesienie 12 repozytoriów do jednego monorepo
Firma ma 12 repozytoriów frontendowych: 5 aplikacji, bibliotekę komponentów, klienta API i kilka paczek narzędziowych. Zmiana w bibliotece wymaga publikacji na npm i 5 PR-ów aktualizujących wersje, co trwa tydzień. CTO chce monorepo w tym kwartale, a zespoły boją się utraty historii i zablokowania pracy.
Zanim rozwiniesz: powiedz na głos, jak byś to rozwiązał, i nazwij co najmniej jeden kompromis.
Moje rozwiązanie
Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.
Pokaż, czego szuka rekruter, i modelową odpowiedź
Co sprawdza rekruter
- Czy planujesz migrację przyrostowo i bez zatrzymania pracy
- Czy znasz narzędzia i wiesz, co dokładnie dają
- Czy myślisz o historii gita, CI, właścicielach i komunikacji
Odpowiedź seniora
Wybór narzędzia: pnpm workspaces jako fundament, a nad tym Nx albo Turborepo dla grafu zależności, cache zadań i budowania tylko zmienionych projektów. Nx daje więcej (generatory, reguły granic), Turborepo jest prostszy. Wybieram na podstawie potrzeb, nie mody.
Kolejność: najpierw szkielet monorepo z CI, cache zdalnym i wspólną konfiguracją TS i ESLint. Potem przenoszę paczki od dołu grafu: klient API i biblioteka komponentów, bo na nich zyskujemy najwięcej. Historię zachowuję przez git subtree lub git filter-repo do podkatalogu. Każda aplikacja przechodzi osobno w uzgodnionym oknie, a stare repo zostaje w trybie tylko do odczytu z linkiem.
Od pierwszego dnia: CODEOWNERS dla katalogów, wymagane checki tylko dla projektów dotkniętych zmianą (nx affected) i budżet czasu CI. Mierzę czas od zmiany w bibliotece do wdrożenia w aplikacjach, przed i po.
Typowe wpadki
- Przeniesienie wszystkiego w jeden weekend
- Monorepo bez cache i affected, przez co CI buduje wszystko przy każdej zmianie
- Brak właścicieli katalogów i chaos w review
Dopytają o
- Jak rozwiążesz konflikty wersji zależności między aplikacjami?
- Co z aplikacją, której zespół nie chce się przenieść?
- Jak zapewnisz, że repo nie urośnie do rozmiaru, który spowalnia gita?