// user.module.ts @Module({ imports: [AuthModule], providers: [UserService], }) export class UserModule {} // auth.module.ts @Module({ imports: [UserModule], providers: [AuthService], }) export class AuthModule {}UserModule 引入了 AuthModule,而 AuthModule 又反过来引入 UserModule。NestJS 虽然提供了 forwardRef() 这种临时补丁,但问题并没有真正解决,只是勉强能跑。
@Module({ providers: [JwtService, ConfigService], exports: [JwtService, ConfigService], }) export class CoreModule {}
以后需要这些服务的地方,统一引入 CoreModule,不再模块间互相引用。
2. 按“职责”而不是“功能”拆分模块user/ user.controller.ts user.service.ts user.module.ts auth/ auth.controller.ts auth.service.ts auth.module.ts我改成这样:
services/ auth.service.ts user.service.ts controllers/ auth.controller.ts user.controller.ts modules/ auth.module.ts user.module.ts边界更清晰、导入更简单,自然就不会出现“互相依赖”的死循环。
export interface UserStore { findUserByEmail(email: string): Promise<User>; }AuthService 依赖的是 UserStore 接口,而不是 UserService 具体实现,这样就避免了双向绑定。
3.依赖注入稳定性提升
结论
架构优化,不只是让代码更干净,还能让性能飞起来。如果你也在优化 NestJS,不妨看看你的模块导入关系。有时候,真正的性能瓶颈,就藏在那些你“习惯了”的结构里。