【Nest指北系列-源码】(一)目录结构

这个系列前面的文章已经将 Nest 的核心思想以及核心概念过了一遍,并举例了一些使用场景。相信看过这些介绍后,应该可以上手使用 Nest 开发项目。

指路之前的文章:

从这章开始,我们将更进阶的了解 Nest 的实现思想,对其源码进行分析。

获取源码

首先,从 github 找到 Nest 的源码,git clone 到本地。

目录结构

根目录

根目录结构大致如下:

go 复制代码
nestjs/
├── benchmarks/
├── packages/
├── sample/
├── integration/
├── tools/
├── scripts/
├── package.json
└── tsconfig.json

其中每个子目录的分工为:

  • benchmarks: 性能测试相关代码
  • integration: 集成测试相关代码
  • packages: 核心代码,每个子目录对应一个核心模块包
  • sample: 示例项目代码
  • scripts: 发布脚本、CI 工具脚本等
  • tools: 构建和性能测试相关的工具函数
  • tsconfig.json: Typescript 配置

packages 目录

下面来看下包含核心源码的 packages 目录:

lua 复制代码
packages/
├── common/
├── core/
├── microservices/
├── platform-express/
├── platform-fastify/
|------ platform-socket.io/
|------ platform-ws/
|------ websockets/
├── testing/
└── ...

它的每个子目录都是一个模块,可以单独发布到 npm,比如 @nestjs/common、@nestjs/core。

common

erlang 复制代码
common/
├── decorator/
├── exceptions/
├── pipes/
├── enums/
├── utils/
└── ...

包含全平台通用的公共模块,比如:

  • decorator: 内置装饰器,比如模块装饰器 @Module、控制器装饰器 @Controller、依赖注入装饰器 @Injectable,@UsePipes、@UseGuards 等,以及 http 相关 @Get、@Post 等等
  • exceptions: 内置异常处理类,比如 HttpException、NotFoundException、ForbiddenException 等
  • pipes: 内置管道,比如:ParseIntPipe、ValidationPipe 等
  • enums: 枚举类,比如 http 状态码等
  • utils: 工具类
  • ...

core

整个框架最核心逻辑,包含依赖注入系统、模块系统、反射机制、路由等。

dart 复制代码
core/
├── guards/
├── interceptors/
├── middleware/
├── services/
├── router/
├── injector/
├── nest-application.ts
├── nest-factory.ts
├── scanner.ts
├── ...
  • guards: 守卫
  • interceptors: 拦截器
  • middleware: 中间件
  • services: 服务,比如 Reflector 类
  • router: 控制器路由注册逻辑
  • injector: 依赖注入相关逻辑,包含 NestContainer(IoC 容器)、Module 等定义
  • nest-application.ts: NestApplication 类
  • nest-factory.ts: NestFactory 类
  • scanner.ts: 模块依赖关系扫描

microservices

微服务模块

platform-express / platform-fastify

  • 用于在 nest 中集成 express、fastify 框架。
  • 默认使用 express 基础框架,但 nest 不依赖其中任何一个。
  • Fastify 是一个更快速、低开销的 Web 框架,对性能要求高的应用场景会使用到它。

platform-socket.io / platform-ws / websockets

WebSocket 支持模块

testing

提供测试工具,如 Test.createTestingModule()。

总结

本章介绍了 Nest 源码的目录结构,代码按照功能模块组织,遵循单一职责原则。接下来我们对源码的分析会集中在 packages/common 和 packages/core 目录中。

相关推荐
花旗蜕变5 天前
前端转 NestJS 全栈实践:从表单页面到微信业务系统
前端·typescript·nestjs
柒和远方11 天前
NestJS + TypeORM 学习笔记:语法和类型不绕了
postgresql·orm·nestjs
小二李17 天前
第15章 NestJS 项目部署
nestjs
前端踩bug工程师18 天前
nestjs 实现一对多,多对一,一对一在实现上的区别
nestjs
爱丶不疚23 天前
Electron:Module 与 Service 的职责边界与加载时序编排
前端·electron·nestjs
沐沐师1 个月前
Nest.js 微服务入门教程
微服务·nestjs
沐沐师1 个月前
Redis 入门教程
redis·nestjs
谷无姜1 个月前
QuizForge:在不停踩坑后的技术决策复盘
前端·nestjs
Flynt1 个月前
NestJS 12升级踩坑:从Webpack到Rspack,我折腾了一整个周末
typescript·node.js·nestjs
张洪权1 个月前
nest.js websocket 群聊----私聊功能
前端·nestjs