module加载顺序,这个可以分享下文章来巩固一下么?没听太明白
来源:9-7 通用业务系统:日志模块代码重构(作业)

qq_疯狂世界_1
2022-12-22
最后几分钟,来回听了几遍还是听的似是而非。
写回答
1回答
-
Brian
2022-12-31
哇,小伙伴,你是我见到的第一个有这个想法的人,看来是用心了,表扬。
这里给你一个思路来看这个问题:看顺序有几个原则:
基本:JS本身是顺序执行的;->所以,在modules里面注册的时候,是顺序进行注册;
看是否是异步,异步的JS程序会直接跳过,先去执行后面的;所以.forRootAsync会在后面执行;
Constructor会在初始化的时候运行;
Nest的模块系统在处理时:扫描module依赖,扫描constructor中的依赖,创建providers、injectable、controller实例。参考:https://github.com/nestjs/nest/blob/803916158fafee6615601b3ebf4e34394db517df/packages/core/injector/instance-loader.ts#L38
关于AppModule加载顺序,这里有源码:https://github.com/nestjs/nest/blob/803916158fafee6615601b3ebf4e34394db517df/packages/core/scanner.ts#L70
public async scan(module: Type<any>) { // 1. 把一些内建module添加到IoC容器中 await this.registerCoreModule(); // 2. 把传入的module添加到IoC容器中 await this.scanForModules(module); // 3. 扫描当前IoC容器中所有module的依赖 await this.scanModulesForDependencies(); this.calculateModulesDistance(); this.addScopedEnhancersMetadata(); this.container.bindGlobalScope(); }
5. Log模块打印顺序与实际的加载顺序,可能存在不一致的情况(这个使用最新版本的课程代码可以看出来)
00
相似问题