NestJS Module

1,082 阅读2分钟

Module 模块

在 NestJS 中,有一套自己的模块系统。这些模块都被 Module 装饰器进行修饰。

这些模块直接相互依赖。 NestJS 中包含一个 模块,相当于入口模块,模块依赖之间形成了模块树。组成 NestJS 的应用。这一点其实就类似 中央集权制度,地方设置 郡县制度秦朝制度一样。事件万物好想都是一样的,只是形式上发生了改变。

@Moudule 装饰器

我们知道装饰可以是函数,也可以是类,因为NestJS 的 module 是要传递参数的所以,这里是可以函数。这个函数接收的参数,就是维系 NestJS 的模块的。

  • providers
  • controllers
  • imports 引入模块
  • exports 导出模块

Module 的分类

  1. 功能模块
  2. 共享模块
  3. 全局模块
  4. 动态模块

功能模块

NestJS 是使用类和装饰器的开发的框架,实现了切面编程 AOP, 一个切面就完成一个功能,比如 Controller 层,就完成路由路由的控制层。Service 就完成一个数据的支持层。

这样组织代码使得代码的结构,非常的清新,便于维护。前端 React 组件化的拆分,使用 Redux 为思想的时候,容器组件和UI是分开的类似。这也符合软件开发过程的中的单一职责原则。

共享模块

模块具有共享的能力是非常重要的,共享问题就来,是类的同一个实例吗?如果不是同一实例那就没有意义了。NestJS 中模块是单例的,也就是不管怎么共享其实访问的都是同一个实例。

模块的共享本质:模块的 exports 和 imports 的依赖项目,可以直接通过模块的引入被访问到,而不需要将其再次引入,这样就解决了模块依赖项目的访问的问题。

模块循环依赖

循环依赖是不可绕开的问题,在 NestJS 中,Module 本身是不能作为依赖注入到程序的。

全局模块

全局对象,我们应该很常见,类似于浏览器的 window 对象,nodejs 的 process/global 对象。NestJS 中也有自己的全局模块 global module,使用 @Global() 修饰。

动态模块

要搞明白动态模块,我们就必须知道与之对应的静态模块。静态模块不能解决哪些问题。动态模块是如何解决静态模块的问题的。