module加载顺序,这个可以分享下文章来巩固一下么?没听太明白

来源:9-7 通用业务系统:日志模块代码重构(作业)

qq_疯狂世界_1

2022-12-22

最后几分钟,来回听了几遍还是听的似是而非。

写回答

1回答

Brian

2022-12-31

哇,小伙伴,你是我见到的第一个有这个想法的人,看来是用心了,表扬。

这里给你一个思路来看这个问题:看顺序有几个原则:

  1. 基本:JS本身是顺序执行的;->所以,在modules里面注册的时候,是顺序进行注册;

  2. 看是否是异步,异步的JS程序会直接跳过,先去执行后面的;所以.forRootAsync会在后面执行;

  3. Constructor会在初始化的时候运行;

  4. 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模块打印顺序与实际的加载顺序,可能存在不一致的情况(这个使用最新版本的课程代码可以看出来)

0
0

NestJS 入门到实战 前端必学服务端新趋势

近几年快速发展的Node.js框架,掌握未来前端工程师后端开发能力

569 学习 · 238 问题

查看课程