Olá Giovani, tudo bom?
Para que fique mais claro o por que do uso de módulos no Angular, entenda que um aplicação Angular precisa conter no mínimo um módulo, AppModule, e um componente,AppComponent.
Os módulos são usados nas aplicações para modularizar a aplicação em partes, por exemplo no projeto GatitoBook, temos o HomeModule. Os componentes declarados neste módulo,
@NgModule({
declarations: [
HomeComponent,
LoginComponent,
NovoUsuarioComponent,
],
são responsáveis pela autenticação dos usuários. Os componentes deste módulo precisa do recurso de outros módulos para realizar essa funcionalidade. Para criar as telas de login e novo usuário, esses componentes precisam de um formulário, e o Angular tem um módulo para facilitar captura de valores dos campos e outros recursos, por isso importamos o FormsModule.
imports: [
CommonModule,
HomeRoutingModule,
FormsModule,
MensagemModule,
ReactiveFormsModule,
],
O HomeRoutingModule é um módulo que possui as rotas e permite que os componentes crie meios de navegação, e esse para fazer isso também importa o RouterModule.
Agora vamos para o AppModule, o módulo raiz da aplicação. Ele é responsável por importar os módulos que serão usados em toda a aplicação, como é o caso do HttpClientModule, módulo é usado para enviar solicitações GET, POST, PUT, PATCH e DELETE para um servidor, e no GatitoBook alguns desses recursos são usados em serviços como o de AutenticacaoService.
No AutenticacaoService usa o módulo por meio do HttpClient, biblioteca que só pode ser importada para o serviço ou componente(se for o caso) se o HttpClientModule for importado.
Ficou claro até aqui?