后端运维压测工程:NestJS项目部署与通信机制验证 - 第1节

1.1 使用 CLI 创建项目

NestJS 官方提供了一套强大的 CLI 工具,用于快速搭建项目骨架。执行以下命令即可完成初始化:

npm i -g @nestjs/cli
nest new nest-deploy-demo
cd nest-deploy-demo

CLI 会引导选择包管理器(npm / yarn / pnpm),并自动安装依赖。初始化完成后,项目可直接启动:

npm run start:dev

访问 http://localhost:3000 即可看到 Hello World! 响应。

提示: 使用 --strict 参数可启用 TypeScript 严格模式,适合生产级项目。

1.2 项目目录结构解析

CLI 生成的标准目录结构如下,每个文件/文件夹都有明确的职责:

路径 类型 职责说明
src/ 目录 应用源代码根目录,所有业务模块、控制器、服务均在此
src/main.ts 文件 应用入口,创建 Nest 实例并监听端口
src/app.module.ts 文件 根模块,声明全局依赖、控制器、提供者
src/app.controller.ts 文件 根控制器,定义路由与请求处理
src/app.service.ts 文件 根服务,封装业务逻辑
test/ 目录 端到端测试与单元测试文件
node_modules/ 目录 依赖包(不纳入版本控制)
package.json 文件 项目元数据、脚本、依赖声明
tsconfig.json 文件 TypeScript 编译配置
nest-cli.json 文件 NestJS CLI 专属配置(编译选项、资源路径)
关键理解: NestJS 采用模块化架构,src/ 下的每个功能单元都是一个独立模块,便于后续微服务拆分与部署。

1.3 核心配置文件说明

以下三个配置文件决定了项目的编译、运行与部署行为:

1.3.1 nest-cli.json

NestJS CLI 的专属配置,控制构建输出、资源路径等:

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true
  }
}
  • sourceRoot:源码根目录,默认 src。
  • deleteOutDir:构建前是否清空输出目录,避免残留文件。
  • collection:使用的代码生成器集合,默认 @nestjs/schematics。

1.3.2 tsconfig.json

TypeScript 编译配置,影响代码检查与输出:

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "ES2021",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": true,
    "noImplicitAny": true,
    "strictBindCallApply": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true
  }
}
  • emitDecoratorMetadata / experimentalDecorators:必须开启,NestJS 依赖装饰器元数据实现依赖注入。
  • outDir:编译输出目录,默认 ./dist,部署时运行 dist/main.js。
  • strictNullChecks / noImplicitAny:推荐开启,提升代码健壮性。

1.3.3 package.json

项目元数据与脚本入口:

{
  "name": "nest-deploy-demo",
  "version": "0.0.1",
  "scripts": {
    "build": "nest build",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:prod": "node dist/main",
    "test": "jest"
  },
  "dependencies": {
    "@nestjs/common": "^10.0.0",
    "@nestjs/core": "^10.0.0",
    "@nestjs/platform-express": "^10.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.8.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^10.0.0",
    "@nestjs/schematics": "^10.0.0",
    "@types/node": "^20.0.0",
    "typescript": "^5.0.0"
  }
}
  • scripts.start:prod:生产环境启动命令,直接运行编译后的 dist/main.js。
  • reflect-metadata:运行时反射元数据库,NestJS 依赖注入的核心依赖。
  • @nestjs/platform-express:默认 HTTP 平台适配器,支持切换为 Fastify。
注意: 部署时务必使用 npm run build 编译,然后通过 node dist/main 启动,不要直接运行 nest start,后者会额外加载 CLI 进程,增加资源开销。

1.4 项目初始化流程总览

下图展示了从 CLI 命令到可运行服务的完整初始化链路:

NestJS 项目初始化流程 npm i -g @nestjs/cli nest new 项目名 选择包管理器 安装依赖 生成项目骨架 配置 nest-cli / tsconfig npm run start:dev 访问 localhost:3000 验证 Hello World!
总结: 初始化阶段的核心产出是 src/ 目录结构、nest-cli.json、tsconfig.json 和 package.json。这四个要素构成了后续模块开发、编译构建与生产部署的基础。理解每个配置项的作用,能有效避免部署阶段的低级错误。