在 NestJS 中,模块默认是单例的。这意味着无论一个模块被导入多少次,它的实例都会在整个应用程序中共享。因此,一个模块只需要配置一次,所有导入该模块的其他模块都可以访问该配置。
模块的单例行为
当你在多个地方导入同一个模块时,NestJS 只会创建一个实例并在全局共享。例如:
@Module({
providers: [SomeService],
exports: [SomeService],
})
export class SharedModule {}然后这个模块被多个其他模块导入:
@Module({
imports: [SharedModule],
})
export class ModuleA {}
@Module({
imports: [SharedModule],
})
export class ModuleB {}尽管 SharedModule 被导入了两次(在 ModuleA 和 ModuleB 中),但 NestJS 只会创建一个 SharedModule 的实例,这个实例中的服务(例如 SomeService)也是共享的。
例外情况:动态模块
尽管 NestJS 的模块是单例的,但如果你使用动态模块并且每次导入时传入不同的配置,那么每次调用时可能会创建不同的实例。因此,在使用动态模块时,配置和实例化行为可能会有所不同。
总结
是的,在 NestJS 中,一个模块被多处引用时,只需要配置一次,由于单例模式的特性,所有引用这个模块的地方都会共享同一个实例和配置。