初始化目录结构介绍
使用 nest new nest-demo 命令创建一个新的 NestJS 项目后,会生成一个标准的项目目录结构。以下是各主要目录和文件的简要介绍
nest-demo/
├── dist/ # 编译后的可运行代码(部署用)
├── node_modules/ # 项目依赖包(由 pnpm 安装)
├── src/ # 源代码目录(核心开发区域)
│ ├── app.controller.spec.ts # app 控制器的单元测试文件
│ ├── app.controller.ts # 应用的主控制器(处理 HTTP 请求)
│ ├── app.module.ts # 应用的根模块(组织控制器、服务等)
│ ├── app.service.ts # 应用的主服务(业务逻辑)
│ └── main.ts # 应用入口文件(启动 Nest 应用)
├── test/ # 集成测试和端到端测试目录
│ ├── app.e2e-spec.ts # 端到端测试示例
│ └── jest-e2e.json # E2E 测试的 Jest 配置
├── .gitignore # Git 忽略文件配置
├── .prettierrc # prettierrc 配置文件,用于代码格式化配置(如缩进、引号风格、分号等)
├── eslint.config.mjs # ESLint 配置文件,用于代码质量与规范配置(如禁止未使用变量、强制类型安全等)
├── nest-cli.json # Nest CLI 配置文件(如编译选项、monorepo 设置等)
├── package.json # 项目元数据和依赖管理
├── package-lock.yaml # 依赖锁定文件
├── README.md # 项目说明文档
├── tsconfig.build.json # 构建时使用的 TypeScript 配置(继承自 tsconfig.json)
└── tsconfig.json # TypeScript 编译配置
各关键文件/目录详解
dist/
- 作用:构建输出目录。
- 内容:运行
pnpm run start:dev后,TypeScript 源码(src/)会被编译成 JavaScript 并输出到这里。 - 用途:用于生产环境部署(例如
node dist/main)。 - 注意:刚创建项目时不存在,需手动构建才会生成。
node_modules/
- 作用:存放项目所有 第三方依赖包(如
@nestjs/core,express,rxjs等)。 - 来源:由包管理器
pnpm根据package.json安装。 - 注意:不应提交到 Git(已被
.gitignore忽略)。
src/
所有应用源代码都放在这里,采用 NestJS 的模块化架构。
src/main.ts
应用入口文件。使用 NestFactory.create() 启动 Nest 应用,并监听端口(如 3000)。
src/app.module.ts
根模块(Root Module)。通过 @Module({}) 装饰器组织控制器(Controllers)、服务(Providers)、导入其他模块等。是整个应用的装配中心。
src/app.controller.ts
默认控制器。处理 HTTP 请求(如 GET /),通过 @Controller() 定义路由。
src/app.service.ts
默认服务。封装业务逻辑(如数据库操作、计算等),通常被控制器注入使用。
src/app.controller.spec.ts
对 AppController 的 单元测试文件,使用 Jest 编写,用于验证控制器逻辑是否正确。
test/
用于模拟真实用户请求,测试整个应用流程。
test/app-e2e-spec.ts
示例 E2E 测试:启动应用、发送 HTTP 请求、断言响应。
jest-e2e.json
专为 E2E 测试定制的 Jest 配置文件(如测试环境、超时设置等)。
注:单元测试在 src/ 中(如 *.spec.ts),E2E 测试在 test/ 中。
.gitignore
指定 Git 忽略的文件/目录(如 dist/, node_modules/, .env 等),避免提交无关内容。
.prettierrc
Prettier 代码格式化配置(如缩进、引号风格、分号等),保持代码风格统一。
eslint.config.mjs
ESLint 的新式配置文件(ESM 格式),用于 代码质量检查与规范(如禁止未使用变量、强制类型安全等)。
nest-cli.json
Nest CLI 的专属配置
package.json
项目元信息 + 依赖声明(dependencies / devDependencies)+ 自定义脚本(如 start, build, test)。
package-lock.yaml
由 pnpm 生成的依赖锁定文件(注意:npm 生成 package-lock.json,yarn 生成 yarn.lock)。我用的是 pnpm,所以是 .yaml 格式,确保团队安装完全一致的依赖版本。
README.md
项目说明文档,通常包含启动命令、技术栈介绍等。
tsconfig.json
TypeScript 编译主配置(如 target、module、strict 模式、路径映射等)。
tsconfig.build.json
专用于构建(nest build)的 TS 配置,通常继承 tsconfig.json 并排除测试文件。