Защо избрахме Nx за монорепото на Inviteathon?
Когато стартирахме Inviteathon, знаехме, че ще надрасне едно Angular приложение. Имахме административен портал, клиентско табло за управление и набор от споделени UI библиотеки.
Проблемът с Multirepo
Преди това поддържахме отделни хранилища за всеки проект. Споделянето на код означаваше публикуване на частни NPM пакети или използване на git submodules—и двете въвеждаха допълнително триене.
Влиза Nx
Nx ни позволи да държим всичко в едно хранилище, докато
поддържаме строги граници чрез
tags в nx.json.
{
"projects": {
"inviteathon-client": { "tags": ["type:app", "scope:client"] },
"inviteathon-admin": { "tags": ["type:app", "scope:admin"] },
"shared-ui": { "tags": ["type:lib", "scope:shared"] }
}
} Сега, ако се опитаме да импортираме административна библиотека в клиентското приложение, linter-ът ни спира незабавно. CI/CD се изпълнява само за засегнатите проекти.