nestjs 源码分析

NestJs 模块载入机制

AppModel初始化流程图

Created with Raphaël 2.2.0 初始化应用 调用NestFacotry.create() 是否传入httpServer? 使用用户传入的HttpServer 初始化HttpServer 创建ApplicationConfiguration 创建NestContainer 初始化AppModel模块实例 扫描AppModel的引入的模块 向NestContainer中添加Model Container.modules.set(new Model()) 遍历AppModel引入的所有Model 并为其在Container内生成Model实例 扫描AppModel引入的模块的依赖 yes no

Container.addModel

Created with Raphaël 2.2.0 初始化Container 传入Model调用Container的addModel方法 Model是有效的吗? 编译模块获取Model Object Hash() 是否已经向Container中添加过这个模块(hash)? 创建模块成功 创建一个新的NestModel实例 创建模块失败 yes no yes no

new NestModel

Created with Raphaël 2.2.0 开始构建一个新的NestModel实例 输入ModelMetaData 构造参数(metaData,scope,container) 添加需要依赖注入的对象 添加模块引用 添加模块组件 添加反射 添加应用引用 添加扩展Context 将Container添加到自己的组件中 遍历Container内的所有Model 遍历Model引用的Import,Model数组Meta对象数据 遍历Model内的Provider,Server,Controller 查找Model内的ForwradRef 如果存在先处理Model内的ForwardRef 创建NestModel结束

你可能感兴趣的:(NestJs)