【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: 内置异常处理类,比如 HttpExceptionNotFoundExceptionForbiddenException
  • pipes: 内置管道,比如:ParseIntPipeValidationPipe
  • 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/commonpackages/core 目录中。

相关推荐
Allshadow1 天前
Nest.js - 目录结构
javascript·nestjs
南一Nanyi2 天前
依赖注入和控制反转
前端·设计模式·nestjs
晓得迷路了3 天前
栗子前端技术周刊第 138 期 - NestJS 12、Astro 7.1、npm 12...
前端·javascript·nestjs
xiaofeichaichai5 天前
NestJS 实战:JWT 登录认证、Token 刷新与安全退出
redis·nestjs·jwt·twitter
无双_Joney7 天前
[四期 - 4] NestJS专栏 - 征召一下大家的意见,非常想知道大家都想看看Nest的哪些方面
前端·后端·nestjs
糖墨夕8 天前
AI Agent技术栈选择:Vue3 + NestJS + TypeScript 为什么是绝佳组合
前端·nestjs
悟空瞎说20 天前
企业级 NestJS + Prisma 分层架构:单例客户端、生命周期托管与可复用扩展实践
nestjs
悟空瞎说23 天前
NestJS 接口设计避坑:摒弃万能用户更新接口,落地单一职责与最小权限原则
后端·nestjs
光影少年1 个月前
HashRouter 和 BrowserRouter 区别、底层原理、部署差异
前端·react.js·nestjs
悟空瞎说1 个月前
NestJS 12 预览版重磅来袭:全面原生 ESM 正式落地
nestjs