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 灵活
浙公网安备 33010602011771号