nestjs 使用类似midwayjs 模式加载模块
midwayjs 在不少使用上实际与nestjs 是比较类似的,midwayjs 提供了一个比较有意思的玩法,就是组件化,nestjs 当然也有自己比较强大的模块化能力
参考玩法
机制上实际比较简单,核心是代码组织以及模块的导入,因为nestjs 也是提供了ioc 能力的,核心是将我们的模块import 进去就行了,之后由nestjs 的ioc 机制进行模块加载
- 简单玩法 入口模块
import { Module } from '@nestjs/common';
import { LoginModule } from './dynamic.module';
import { UserModule } from './user/user.module';
function loadModules() {const modulea = require('modulea');const moduleb = require('moduleb');/* eslint-disable @typescript-eslint/no-unsafe-member-access */return [modulea.default, moduleb.default];
}
@Module({imports: [...loadModules(),LoginModule.register({ name: 'loginv2' }),LoginModule.register({ name: 'login' }),UserModule,]
})
export class AppModule {}
- 模块能力定义 核心就是包含controllers ,service 定义
import { Module } from '@nestjs/common';
import { ModuleAController } from './modulea.controller';
import { ModuleAService } from './modulea.service';
import { join } from 'path';
@Module({imports: [],controllers: [ModuleAController],providers: [ModuleAService],
})
export class ModuleAModule {}export default ModuleAModule;
说明
以上是一个简单说明,核心还是模块的组合以及导入,机制上实际与midwayjs 类似,差异在midwayjs 一些抽象包装工程化很不错,比如配置管理等,当然nestjs 也是有自己的配置管理的,但是并不如midwayjs 灵活
参考资料
https://midwayjs.org/en/
https://nestjs.com/
