Go契约性能测试体系:NestJS参数配置与性能优化 - 第2节

2.1 NestJS CLI 安装与使用

NestJS CLI 是项目初始化的核心工具,提供从脚手架搭建到代码生成的完整工作流。本节覆盖 CLI 的安装、常用命令及项目结构解析。

2.1.1 全局安装与版本验证

使用 npm 全局安装 NestJS CLI:

npm install -g @nestjs/cli

安装完成后验证版本:

nest --version

输出示例:

10.3.2
建议: 保持 CLI 版本与项目依赖的 @nestjs/core 版本一致,避免生成模板与运行时 API 不匹配。

2.1.2 常用命令速查

命令 功能 示例
nest new <project> 创建新项目 nest new my-api
nest start 启动开发服务器 nest start --watch
nest build 编译项目 nest build --webpack
nest generate 生成模块/控制器/服务等 nest g module user
nest info 显示项目依赖与系统信息 nest info

2.2 项目结构解析

执行 nest new nest-demo 后生成的标准项目结构如下:

nest-demo/
├── src/
│   ├── app.controller.spec.ts
│   ├── app.controller.ts
│   ├── app.module.ts
│   ├── app.service.ts
│   └── main.ts
├── test/
│   ├── app.e2e-spec.ts
│   └── jest-e2e.json
├── node_modules/
├── .eslintrc.js
├── .prettierrc
├── nest-cli.json
├── package.json
├── tsconfig.build.json
├── tsconfig.json
└── README.md

2.2.1 核心文件职责

文件/目录 职责
src/main.ts 应用入口,创建 Nest 实例并监听端口
src/app.module.ts 根模块,声明全局依赖与导入
src/app.controller.ts 根控制器,处理路由请求
src/app.service.ts 根服务,封装业务逻辑
nest-cli.json CLI 配置文件,控制生成行为
tsconfig.json TypeScript 编译配置
架构要点: NestJS 采用模块化架构,每个功能域对应一个模块(Module),模块内包含控制器(Controller)、服务(Service)和数据访问层。这种分层结构天然支持依赖注入与单元测试。

2.3 nest generate 命令详解

nest generate(简写 nest g)是日常开发中使用频率最高的命令,支持生成多种代码构件。

2.3.1 生成语法

nest generate <schematic> <name> [options]

常用 schematic 类型:

Schematic 简写 生成内容
module mo 模块文件
controller co 控制器文件
service s 服务文件
guard gu 守卫文件
interceptor in 拦截器文件
pipe pi 管道文件
filter f 异常过滤器文件
middleware mw 中间件文件
resource res 完整 CRUD 资源

2.3.2 常用选项

选项 说明 示例
--flat 不生成子目录 nest g co user --flat
--no-spec 跳过测试文件 nest g s user --no-spec
--dry-run 预览生成结果,不实际写入 nest g mo user --dry-run
--path 指定生成路径 nest g mo user --path modules

2.3.3 生成完整 CRUD 资源

nest g resource 是最强大的生成命令,一次性创建模块、控制器、服务、DTO、实体文件及 REST 或 GraphQL 模板:

nest g resource user

? What transport layer do you use? REST API
? Would you like to generate CRUD entry points? Yes

执行后生成的文件结构:

src/user/
├── dto/
│   ├── create-user.dto.ts
│   └── update-user.dto.ts
├── entities/
│   └── user.entity.ts
├── user.controller.spec.ts
├── user.controller.ts
├── user.module.ts
├── user.service.spec.ts
└── user.service.ts
注意: 生成资源时默认包含测试文件(.spec.ts)和 DTO/Entity 文件。如果项目不需要测试文件,可追加 --no-spec 选项。

2.4 自定义 CLI 配置

nest-cli.json 是 CLI 行为的配置文件,位于项目根目录。通过修改该文件可以控制生成代码的默认行为、编译选项和项目元数据。

2.4.1 默认配置结构

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true,
    "webpack": false,
    "tsConfigPath": "tsconfig.build.json"
  }
}

2.4.2 常用配置项

配置项 类型 说明
sourceRoot string 源代码根目录,默认 src
collection string 使用的 schematics 集合,默认 @nestjs/schematics
compilerOptions.deleteOutDir boolean 编译前是否清空输出目录
compilerOptions.webpack boolean 是否使用 webpack 打包
compilerOptions.tsConfigPath string 指定 TypeScript 配置文件路径
generateOptions.spec boolean 全局控制是否生成测试文件
generateOptions.flat boolean 全局控制是否使用扁平目录

2.4.3 自定义生成行为示例

以下配置关闭所有测试文件生成,并启用扁平目录结构:

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  },
  "generateOptions": {
    "spec": false,
    "flat": true
  }
}
性能建议: 在大型项目中,建议将 deleteOutDir 设为 true,避免旧编译产物残留导致运行时加载错误文件。同时关闭 webpack 可减少构建复杂度,除非项目有特殊打包需求。

2.5 CLI 工作流与项目初始化流程

下图展示了从 CLI 安装到项目启动的完整工作流:

NestJS CLI 项目初始化工作流 安装 CLI nest new 项目名 编辑 nest-cli.json nest g module user nest g controller user nest g service user nest start --watch 提示:使用 --dry-run 预览生成结果,避免误操作覆盖已有文件

2.6 项目初始化最佳实践

  1. 版本锁定: 在 package.json 中锁定 @nestjs/cli 版本,避免团队间环境不一致。
  2. 自定义模板: 通过修改 nest-cli.json 的 generateOptions 统一团队代码风格。
  3. 资源生成优先: 使用 nest g resource 替代手动创建模块/控制器/服务,减少遗漏。
  4. 测试文件策略: 在 CI 环境中开启 --no-spec 加速生成,开发阶段保留测试文件。
  5. 目录结构规范: 按功能域划分模块目录,避免将所有代码放在 src 根目录。
架构决策: 推荐使用 nest g resource 生成完整 CRUD 资源,该命令自动创建 DTO、Entity 和 REST 端点模板,减少重复劳动并保持代码一致性。对于微服务项目,可在生成时选择 Microservice 传输层,自动适配消息队列模式。