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