Это одна из тех вещей, где это зависит от вашего варианта использования. Чтобы уменьшить размеры комплектов, в идеале вы толкаете все как можно ниже в дереве модулей. Таким образом, в вашем App.Module будет очень мало, и большинство ваших компонентов импорта / декларации / провайдеров / записей будут в вашем функциональном модуле. Это может включать в себя не внедрение ваших услуг в root, если вам не нужно, и вместо этого настройку их в массиве поставщиков функциональных модулей.
Однако есть некоторые компромиссы, которые необходимо учитывать. Например, в идеале с вашими Angular материальными модулями вы должны импортировать их в свои функциональные модули, но если у вас будет много функциональных модулей, будет немного неприятно иметь go в модуле и добавьте импорт для каждого модуля материала, который вам нужен в вашем функциональном модуле. С другой стороны, для вашего модуля входа в систему вам, скорее всего, понадобится всего несколько материальных модулей, в то время как для всего вашего приложения может понадобиться куча их. все как можно глубже в дерево модулей. Просто имейте в виду, что вы легко наносите удар по простоте разработки.
Итак, для вещей, которые вы упомянули (Angular Модули, Angular Модули Материалов, Сервисы, другие NPM), вы хотели бы поместить их sh как можно ниже в дерево модулей. , Имейте в виду, что для сервисов Singleton они потребуются в вашем app.module, чтобы они оставались сервисами Singleton. Если вы переместите их в массив поставщиков в функциональных модулях, то все они получат свой собственный экземпляр. Еще одним ярким примером является HttpClientModule, который вы хотите импортировать только один раз в root.