【Nest.js】模块之间依赖关系,以及导出导入链的完整性
Nest.js 通常会自动判断模块之间的依赖关系,自动决定模块导入顺序,所以,通常不用担心模块导入顺序。
你只要写清楚模块依赖关系就可以,比如,A 依赖 B,则在 B 模块中 exports,在 A 模块中 imports,就可以了。
但是,要注意更复杂的关系,比如,A 依赖 B,B 又依赖 C,你要确保依赖链条的正确性。在这个例子中,不能在 A 中 import C,那样就破坏了依赖链条。
一个实际例子
我创建了一个 auth.module 模块,专门处理身份验证(JWT)。这个模块依赖系统的 JwtService。
然后在另一个模块 another.module,我需要使用 auth.module 模块中的服务,于是导入该服务。结果运行时报错,缺少 JwtService。于是在 another.module 中 import JwtService,错!
正确的做法是:导出 auth.module,在 another.module 中导入 auth.module,不需要单独导入 JwtService。
而且,必须去掉 JwtService 的导入,以为这个导入破坏了模块加载链条,导致 auth.module 中的配置在 another.module 中缺失!