Въведение
Управлението на множество Angular и NestJS проекти, които споделят общи библиотеки, може да бъде предизвикателство. Дублирането на код, проследяването на зависимости и сложността на уголемяването на проектите могат да забавят разработката. Nx, мощен инструмент за монорепо, помага за оптимизиране на управлението на пакети, ускоряване на изграждането и ефективността на скалирането.
В това проучване разглеждаме как нашият екип успешно внедри Nx за Angular и NestJS проекти в корпоративен мащаб, като оптимизирахме работните процеси и повишихме продуктивността. Нашите споделени библиотеки включват:
- Библиотека за стилизиране: Общи UI компоненти и теми.
- Свързване с външни услуги: Стандартизирана комуникация с външни API-та.
- Библиотека за таблици: Споделени таблични компоненти и функционалности, базирани на PrimeNG.
- Автентикация и авторизация (Keycloak): Обединена сигурност за frontend и backend.
- Kafka Одит и Логове: Централизирано хранилище за логове на събития за NestJS.
- Библиотеки за работни процеси: Гъвкави frontend и backend модули за автоматизиране на процеси.
- Деплоймънт пайплайн: Автоматизирано проследяване, изграждане и доставяне на засегнатите пакети.
С приемането на Nx успяхме да оптимизираме разработката, тестването и CI/CD процесите, като същевременно гарантирахме мащабируемост.
Защо избрахме Nx за управление на монорепо
Nx предоставя структурирано монорепо решение, което оптимизира изграждането, налага добри практики и улеснява ефективното управление на зависимости.
Основните предимства, които забелязахме, включват:
- Повторна употреба на код: Единен източник за всички библиотеки.
- Оптимизирано деплойване: Само засегнатите пакети се деплойват, което намалява CI/CD времето.
- Последователност и добри практики: Стандартизирани модели на разработка за всички проекти.
Графът на зависимостите на Nx, организацията на работното пространство и вградените инструменти гарантират, че всички проекти остават синхронизирани без излишни усилия.
Имплементация на споделени библиотеки
Библиотека за стилизиране
Създадохме повторно използваема библиотека за стилизиране, която включва:
- SCSS теми.
- UI компоненти (бутони, модали, контролери на форми).
- Глобални настройки за типография и оформление.
Това осигури консистентност на UI и намали дублирането на код във всички Angular приложения.
Свързване с външни услуги
Тази библиотека стандартизира интеграцията с външни API-та, като предлага:
- Повторно използваеми API класове.
- Централизирано обработване на грешки.
- Консистентна трансформация на данни между проектите.

Библиотека за таблици
Библиотека, базирана на PrimeNG DataTables, предлагаща:
- Филтриране, сортиране и страниране.
- Персонализирани дефиниции на колони.
- Интеграция с бекенд услуги.
Това позволи на екипите да изграждат сложни таблици бързо, без допълнителна конфигурация.
Автентикация и авторизация с Keycloak
За сигурността внедрихме библиотеки за автентикация и авторизация както за frontend, така и за backend:
- Frontend (auth-fe): Интеграция на Keycloak с Angular и обработка на JWT.
- Backend (auth-be): Интеграция на Keycloak с NestJS и ролеви достъп.
Тези библиотеки осигуряват безпроблемна автентикация и контрол на достъпа във всички приложения.
Kafka Одит и Логове
Модул за централизирано хранилище на логове с Kafka, който осигурява:
- Централизирано логване.
- Структуриран формат на логовете.
- Конфигурируеми събитийни топици.
Това осигури единен процес на логване за всички услуги, повишавайки проследимостта.
Библиотеки за работни процеси
Създадохме гъвкави workflow библиотеки, които предлагат:
- Готови модели и контролери за управление на процеси.
- Автоматични действия на база предварително зададени условия.
- Процеси на одобрение с динамични правила.
- Управление на състоянията за конфигурируеми работни процеси.
Тези библиотеки значително съкратиха времето за разработка на workflow-базирани приложения.
Оптимизация на деплойване с автоматизирани пайплайни
Управлението на множество библиотеки изисква ефективен CI/CD пайплайн. Нашата стратегия включваше:
- Проследяване на зависимости: Nx автоматично открива засегнатите библиотеки.
- Билдване само на засегнатите пакети.
- Инкрементално деплойване: Използване на Nx CLI и Jenkins пайплайни за бързи и стабилни релийзи.
Благодарение на Nx, успяхме да намалим времето за билдване и ускорим деплойването, което позволи по-бързо пускане на нови версии и промени.
Заключение и основни изводи
Внедряването на Nx за управление на споделени Angular и NestJS библиотеки донесе значителни предимства:
- По-висока ефективност на разработката.
- Оптимизирано билдване с по-бързи CI/CD процеси.
- Автоматизация на деплойване, намаляваща риска от грешки.
Nx се доказа като необходим инструмент за мащабируемо управление на монорепо проекти.
С Nx монорепо архитектурата, отключихме ефективност, мащабируемост и безпроблемно сътрудничество.