Careeroza
Global and Dynamic Modules
@Global Modules
Some providers are needed everywhere (config, logger, database). Mark their module with @Global() and import it once in AppModule. Use this sparingly; explicit imports are easier to follow.
src/common/common.module.ts
import { Global, Module } from '@nestjs/common';
import { AppLogger } from './app-logger.service';
@Global()
@Module({
providers: [AppLogger],
exports: [AppLogger],
})
export class CommonModule {}Dynamic Modules (forRoot / register)
A dynamic module is configured when imported. You already use them: ConfigModule.forRoot(), TypeOrmModule.forRoot(), JwtModule.register().
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { JwtModule } from '@nestjs/jwt';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }), // global config
JwtModule.register({ secret: 'dev-secret', signOptions: { expiresIn: '15m' } }),
],
})
export class AppModule {}Tip: Convention: forRoot() configures a module once for the whole app; forFeature() adds per-module settings (for example which entities a module uses); register() configures it for one importing module.