Skip to content
第 167 / 250 章Node⏱ 10 分钟阅读

第 167 章:环境搭建

学习目标

  • 安装 Node.js 20 和 pnpm
  • 用 CLI 创建第一个 NestJS 项目
  • 理解项目结构
  • 启动开发服务器

一、Node.js 安装

bash
# 下载:https://nodejs.org (选 20 LTS)
node -v    # v20.x.x
npm -v

# 配置国内镜像
npm config set registry https://registry.npmmirror.com

二、pnpm 安装

bash
npm install -g pnpm
pnpm -v
pnpm config set registry https://registry.npmmirror.com

三、VSCode 插件

插件作用
NestJS Files模板文件生成
ESLint代码规范
Prettier格式化
TypeScriptTS 支持
Path Intellisense路径补全
Jest测试支持
REST Client调试 API

四、创建项目

4.1 用 CLI(推荐)

bash
# 全局安装
npm i -g @nestjs/cli

# 创建项目(默认用 npm,可指定 pnpm)
nest new my-app --package-manager pnpm

# 进入
cd my-app

# 启动
pnpm run start:dev
# 打开 http://localhost:3000

4.2 不用 CLI

bash
mkdir my-app
cd my-app
pnpm init
pnpm add @nestjs/common @nestjs/core @nestjs/platform-express reflect-metadata rxjs

五、项目结构

my-app/
├── src/
│   ├── app.controller.ts      # 控制器
│   ├── app.controller.spec.ts # 控制器测试
│   ├── app.module.ts          # 根模块
│   ├── app.service.ts         # 服务
│   └── main.ts                # 入口
├── test/
│   ├── app.e2e-spec.ts        # E2E 测试
│   └── jest-e2e.json
├── nest-cli.json              # NestJS CLI 配置
├── tsconfig.json
├── tsconfig.build.json
├── package.json
└── README.md

六、核心文件

6.1 main.ts(入口)

typescript
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // 全局验证管道
  app.useGlobalPipes(new ValidationPipe({
    whitelist: true,
    transform: true,
  }));

  // 监听端口
  await app.listen(3000);
  console.log('Server running at http://localhost:3000');
}

bootstrap();

6.2 app.module.ts(根模块)

typescript
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

6.3 app.controller.ts

typescript
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

6.4 app.service.ts

typescript
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello NestJS!';
  }
}

七、常用命令

bash
# 开发(热重载)
pnpm run start:dev

# 生产
pnpm run build
pnpm run start:prod

# 测试
pnpm run test           # 单元测试
pnpm run test:e2e       # E2E 测试
pnpm run test:cov       # 覆盖率

# 代码规范
pnpm run lint
pnpm run format

# 生成代码
nest g controller users
nest g service users
nest g module users

八、调试

8.1 VSCode launch.json

json
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "NestJS",
      "runtimeExecutable": "pnpm",
      "runtimeArgs": ["run", "start:dev"],
      "console": "integratedTerminal"
    }
  ]
}

8.2 断点调试

start:dev 默认开启 inspect,VSCode 直接 F5 即可。

九、本章小结

步骤命令
安装 CLInpm i -g @nestjs/cli
创建项目nest new my-app
启动开发pnpm run start:dev
生成模块nest g module users

动手练习

  1. 安装 NestJS CLI
  2. 创建 my-app 项目
  3. 启动看 Hello NestJS!
  4. nest g controller test 生成一个 test 控制器
  5. 在 test.controller.ts 加 @Get() 返回你的名字

推荐阅读


下一章:第 168 章:第一个 NestJS 应用

本站基于 VitePress 构建 · 由 Codebook 团队维护