> For the complete documentation index, see [llms.txt](https://guide-angular.wishtack.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://guide-angular.wishtack.io/angular/project-structure-and-modules/feature-module.md).

# Feature Module

Les composants *(ainsi que les directives, pipes, etc...)* sont **regroupés dans des modules par fonctionnalité**. Ces modules sont alors appelés "**feature module"**.

Il existe 5 familles de "feature modules" :

## Domain Feature Module

Ce module met à dispositions des modules qui l'importent un composant de type container qui représente une fonctionnalité entière. Exemple :

```typescript
@NgModule({
    declarations: [
        BookSearchComponent,
        BookSearchFormComponent
    ],
    exports: [
        BookSearchComponent
    ],
    imports: [
        BookModule
    ]
})
export class BookSearchModule {
}
```

## Service Feature Module

Un module qui ne met à disposition que des services *(e.g. : `HttpClientModule`)*. Cf. [Portée des Services](/angular/dependency-injection/portee-des-services.md).

## Widget Feature Module

Un module ne contenant quasiment que des composants *(généralement de type "presentational component") (e.g. `MaterialButtonModule`).*

{% hint style="success" %}
A moins de produire une librairie utilisée par plusieurs équipes *(librairie open-source)*, il est préférable d'exporter tous les composants pour éviter les mauvaises surprises d'export manquant lors de leur utilisation par les copains.
{% endhint %}

## Routed Feature Module

Un module contenant des composants associés à des routes. Cf. [Routing](/angular/routing.md).

Les modules de ce type sont généralement [Lazy Loaded](/angular/routing/lazy-loading.md).

## Routing Feature Module

Un simple module généralement associé à une [Routed Feature Module](/angular/project-structure-and-modules/feature-module.md#routed-feature-module) dont le but est simplement d'alléger la définition de ce dernier en prenant en charge la configuration du [routing](/angular/routing.md).
