Nest.js 拥有一个及其复杂繁琐的模块系统,用来管理应用结构。
每当你在模块内新增一个 Controller、Provider 或是 Module,你都需要显式把 Injectable Class 导入并且传入到相应的字段(@Module { controllers, providers, modules })里。对于一些小应用来说,零星的一些组件显式导入,并不会很麻烦;但是如果是大型应用项目,拥有众多模块,模块内部又有大量的组件时,维护组件模块导入会变得非常麻烦。
我们可以通过 Nest.js 的动态模块功能,实现自动导入指定文件夹下的所有 Nest.js 组件。我在开发的过程中实现了三个有用的动态模块,分别是:AutoControllerModule、AutoProviderModule 和 AutoSequelizeModelModule。这三个动态模块实现方式类似,所以我只对第一个做简要注释说明。
使用示例:
const autoProviderModule = AutoProviderModule.forRoot({
path: [
path.join(__dirname, "./services/**/*.js"),
],
})
@Module({
imports: [
autoProviderModule,
],
exports: [
autoProviderModule,
],
})
export class AppModule {}