Перейти до основного вмісту

ModuleManager

Перший етап обробки метаданих, які ви передаєте у декораторах модулів (таких як @rootModule чи @featureModule), відбувається у сервісі ModuleManager.

Він рекурсивно сканує усі модулі, починаючи з кореневого модуля, пропускає опції декораторів через ModuleNormalizer і зберігає зібрані нормалізовані метадані у вигляді об'єктів NormalizedModuleMeta.

Сканування та нормалізація метаданих

Процес ініціалізації починається з виклику moduleManager.scanAppModule(rootModule):

  1. Нормалізація кореневого модуля: Опції декоратора кореневого модуля передаються в ModuleNormalizer, який перевіряє їхню коректність та формує нормалізовані метадані.
  2. Рекурсивне сканування залежностей: ModuleManager обходить усі модулі, вказані в масивах imports та exports, формуючи повну карту модулів застосунку.
  3. Обробка mixin-декораторів: Якщо модуль використовує розширені mixin-декоратори (наприклад, @restModule чи кастомні @mixin*), запускаються відповідні module mixins для нормалізації розширених метаданих.
  4. Валідація та перевірка цілісності: Перевіряється коректність імпортів/експортів та відсутність конфліктів у конфігураціях модулів.

Динамічне маніпулювання модулями

Після завершення сканування, ModuleManager надає API для огляду та програмного редагування метаданих модулів до того, як AppInitializer збере провайдери та розширення:

  • getMetadata(modRefId): Повертає нормалізовані метадані вказаного модуля.
  • setImports(modRefId, ...imports): Додає імпорти модулів у нормалізоване представлення модуля без прямого редагування його декоратора.
  • removeImport(modRefId, importToFind): Видаляє певні імпорти з нормалізованих метаданих модуля.

Цей механізм дозволяє гнучко налаштовувати застосунок під час тестування (наприклад, підміняти модулі чи провайдери) або динамічно підключати фіч-модулі під час завантаження.