安装与项目初始化
学习目标
- 掌握 Node.js 环境的配置方法
- 学会使用 Nest CLI 创建和管理项目
- 理解 NestJS 项目的基本结构和文件作用
- 能够独立初始化一个 NestJS 项目
- 了解如何配置和定制 NestJS 项目
核心知识点
1. Node.js 环境配置
1.1 Node.js 安装
NestJS 是基于 Node.js 构建的,因此首先需要安装 Node.js。建议安装 Node.js 16.0 或更高版本,以确保兼容性和稳定性。
Windows 系统安装步骤:
- 访问 Node.js 官网
- 下载适合 Windows 系统的安装包(推荐 LTS 版本)
- 运行安装包,按照向导完成安装
- 安装完成后,打开命令提示符,运行
node -v和npm -v验证安装成功
macOS 系统安装步骤:
- 访问 Node.js 官网
- 下载适合 macOS 系统的安装包(推荐 LTS 版本)
- 运行安装包,按照向导完成安装
- 安装完成后,打开终端,运行
node -v和npm -v验证安装成功
Linux 系统安装步骤:
- 使用包管理器安装,例如 Ubuntu 系统可以使用以下命令:
sudo apt update sudo apt install nodejs npm - 或者使用 nvm(Node Version Manager)安装和管理多个 Node.js 版本:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash nvm install node - 安装完成后,运行
node -v和npm -v验证安装成功
1.2 npm 配置
npm 是 Node.js 的包管理器,用于安装和管理依赖包。在使用 npm 时,可以进行一些配置以提高使用体验:
设置 npm 镜像:由于网络原因,可以设置国内镜像以提高下载速度:
npm config set registry https://registry.npmmirror.com设置全局安装路径:默认情况下,全局安装的包会安装到系统目录,可以设置为用户目录:
npm config set prefix "$HOME/.npm-global"更新 npm:确保使用最新版本的 npm:
npm install -g npm@latest
2. Nest CLI 使用
Nest CLI 是一个命令行工具,用于生成 NestJS 项目和各种组件,大大提高了开发效率。
2.1 安装 Nest CLI
使用 npm 全局安装 Nest CLI:
npm install -g @nestjs/cli安装完成后,可以通过以下命令检查 Nest CLI 的版本:
nest --version2.2 Nest CLI 常用命令
Nest CLI 提供了丰富的命令,以下是一些常用命令:
| 命令 | 描述 |
|---|---|
nest new <project-name> |
创建新的 NestJS 项目 |
nest generate module <module-name> |
生成新的模块 |
nest generate controller <controller-name> |
生成新的控制器 |
nest generate service <service-name> |
生成新的服务 |
nest generate pipe <pipe-name> |
生成新的管道 |
nest generate guard <guard-name> |
生成新的守卫 |
nest generate interceptor <interceptor-name> |
生成新的拦截器 |
nest generate filter <filter-name> |
生成新的异常过滤器 |
nest build |
构建项目 |
nest start |
启动项目 |
nest start --watch |
以监视模式启动项目 |
nest start:dev |
启动开发服务器(等同于 nest start --watch) |
nest start:debug |
以调试模式启动项目 |
nest start:prod |
启动生产服务器 |
2.3 命令简写
Nest CLI 支持命令简写,例如:
nest g module <module-name>等同于nest generate module <module-name>nest g controller <controller-name>等同于nest generate controller <controller-name>nest g service <service-name>等同于nest generate service <service-name>
3. 项目结构解析
NestJS 项目具有清晰的目录结构,了解这些结构对于开发和维护项目非常重要。
3.1 默认项目结构
使用 Nest CLI 创建的默认项目结构如下:
project-name/
├── src/
│ ├── app.controller.ts
│ ├── app.controller.spec.ts
│ ├── app.module.ts
│ ├── app.service.ts
│ └── main.ts
├── test/
│ ├── app.e2e-spec.ts
│ └── jest-e2e.json
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── nest-cli.json
├── package.json
├── README.md
├── tsconfig.build.json
└── tsconfig.json3.2 主要文件和目录的作用
src/ 目录:包含应用程序的源代码
- main.ts:应用程序的入口文件,负责创建和启动 NestJS 应用实例
- app.module.ts:应用程序的根模块,负责组织和配置其他组件
- app.controller.ts:示例控制器,处理 HTTP 请求
- app.service.ts:示例服务,包含业务逻辑
- app.controller.spec.ts:控制器的测试文件
test/ 目录:包含端到端测试文件
- app.e2e-spec.ts:端到端测试文件
- jest-e2e.json:端到端测试的 Jest 配置文件
配置文件:
- package.json:包含项目依赖和脚本
- tsconfig.json:TypeScript 配置文件
- tsconfig.build.json:构建时的 TypeScript 配置文件
- nest-cli.json:Nest CLI 配置文件
- .eslintrc.js:ESLint 配置文件
- .prettierrc:Prettier 配置文件
- .gitignore:Git 忽略文件配置
4. 项目配置和定制
NestJS 项目可以根据需要进行配置和定制,以下是一些常见的配置项:
4.1 package.json 配置
package.json 文件包含项目的依赖和脚本配置:
{
"name": "project-name",
"version": "0.0.1",
"description": "",
"author": "",
"private": true,
"license": "UNLICENSED",
"scripts": {
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"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.1"
},
"devDependencies": {
"@nestjs/cli": "^10.0.0",
"@nestjs/schematics": "^10.0.0",
"@nestjs/testing": "^10.0.0",
"@types/express": "^4.17.17",
"@types/jest": "^29.5.2",
"@types/node": "^20.3.1",
"@types/supertest": "^2.0.12",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.42.0",
"eslint-config-prettier": "^8.8.0",
"eslint-plugin-prettier": "^4.2.1",
"jest": "^29.5.0",
"prettier": "^2.8.8",
"source-map-support": "^0.5.21",
"supertest": "^6.3.3",
"ts-jest": "^29.1.0",
"ts-loader": "^9.4.3",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.1.3"
}
}4.2 tsconfig.json 配置
tsconfig.json 文件包含 TypeScript 的配置:
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "ES2021",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
"skipLibCheck": true,
"strictNullChecks": false,
"noImplicitAny": false,
"strictBindCallApply": false,
"forceConsistentCasingInFileNames": false,
"noFallthroughCasesInSwitch": false
}
}4.3 nest-cli.json 配置
nest-cli.json 文件包含 Nest CLI 的配置:
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true
}
}实践案例
使用 Nest CLI 初始化项目
步骤 1:创建新项目
使用 Nest CLI 创建一个名为 nestjs-blog 的新项目:
nest new nestjs-blog执行命令后,CLI 会提示你选择包管理器:
? Which package manager would you ❤️ to use? (Use arrow keys)
❯ npm
yarn
pnpm选择 npm 并按下 Enter 键。
步骤 2:等待项目创建完成
CLI 会自动创建项目目录结构,并安装所需的依赖包。这个过程可能需要几分钟时间,取决于你的网络速度。
步骤 3:进入项目目录
项目创建完成后,进入项目目录:
cd nestjs-blog步骤 4:查看项目结构
使用 ls -la 命令查看项目结构:
ls -la你应该能看到类似以下的输出:
total 160
drwxr-xr-x 13 user group 416 Jul 1 10:00 .
drwxr-xr-x 3 user group 96 Jul 1 09:59 ..
drwxr-xr-x 8 user group 256 Jul 1 10:00 .git
drwxr-xr-x 3 user group 96 Jul 1 10:00 dist
drwxr-xr-x 3 user group 96 Jul 1 10:00 node_modules
drwxr-xr-x 3 user group 96 Jul 1 10:00 src
drwxr-xr-x 3 user group 96 Jul 1 10:00 test
-rw-r--r-- 1 user group 576 Jul 1 10:00 .eslintrc.js
-rw-r--r-- 1 user group 241 Jul 1 10:00 .gitignore
-rw-r--r-- 1 user group 42 Jul 1 10:00 .prettierrc
-rw-r--r-- 1 user group 194 Jul 1 10:00 nest-cli.json
-rw-r--r-- 1 user group 32503 Jul 1 10:00 package-lock.json
-rw-r--r-- 1 user group 1896 Jul 1 10:00 package.json
-rw-r--r-- 1 user group 334 Jul 1 10:00 README.md
-rw-r--r-- 1 user group 546 Jul 1 10:00 tsconfig.build.json
-rw-r--r-- 1 user group 938 Jul 1 10:00 tsconfig.json步骤 5:查看源代码文件
进入 src 目录,查看源代码文件:
cd src
ls -la你应该能看到以下文件:
total 24
drwxr-xr-x 2 user group 64 Jul 1 10:00 .
drwxr-xr-x 13 user group 416 Jul 1 10:00 ..
-rw-r--r-- 1 user group 280 Jul 1 10:00 app.controller.spec.ts
-rw-r--r-- 1 user group 249 Jul 1 10:00 app.controller.ts
-rw-r--r-- 1 user group 240 Jul 1 10:00 app.module.ts
-rw-r--r-- 1 user group 169 Jul 1 10:00 app.service.ts
-rw-r--r-- 1 user group 208 Jul 1 10:00 main.ts步骤 6:启动开发服务器
返回项目根目录,启动开发服务器:
cd ..
npm run start:dev开发服务器启动后,你应该能看到类似以下的输出:
[Nest] 12345 - 07/01/2023, 10:05:00 AM LOG [NestFactory] Starting Nest application...
[Nest] 12345 - 07/01/2023, 10:05:00 AM LOG [InstanceLoader] AppModule dependencies initialized
[Nest] 12345 - 07/01/2023, 10:05:00 AM LOG [RoutesResolver] AppController {/}:
[Nest] 12345 - 07/01/2023, 10:05:00 AM LOG [RouterExplorer] Mapped {/, GET} route
[Nest] 12345 - 07/01/2023, 10:05:00 AM LOG [NestApplication] Nest application successfully started on port 3000步骤 7:验证服务器运行状态
打开浏览器,访问 http://localhost:3000,你应该能看到默认的欢迎消息:
Hello World!步骤 8:修改默认控制器
打开 src/app.controller.ts 文件,修改默认的 getHello 方法:
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();
}
@Get('blog')
getBlog(): string {
return 'Welcome to NestJS Blog!';
}
}保存文件后,开发服务器会自动重新加载。现在你可以在浏览器中访问 http://localhost:3000/blog,看到新的消息:
Welcome to NestJS Blog!互动思考问题
- 为什么需要安装 Node.js 环境?NestJS 对 Node.js 版本有什么要求?
- Nest CLI 有哪些常用命令?它们的作用是什么?
- NestJS 项目的默认结构是怎样的?各个文件和目录的作用是什么?
- 如何配置和定制 NestJS 项目?
- 在初始化项目过程中,你遇到了什么问题?是如何解决的?
- 你认为项目初始化阶段需要注意哪些事项?
小结
本课程详细介绍了 NestJS 的环境配置和项目创建方法,包括 Node.js 环境配置、Nest CLI 使用和项目结构解析。通过实践案例,我们演示了如何使用 Nest CLI 初始化一个 NestJS 项目,并验证了服务器的运行状态。
Nest CLI 是一个强大的工具,它大大简化了 NestJS 项目的创建和管理过程。通过掌握 Nest CLI 的使用方法,你可以更加高效地开发 NestJS 应用。
了解 NestJS 项目的结构对于后续的开发和维护非常重要。每个文件和目录都有其特定的作用,合理组织项目结构可以提高代码的可维护性和可读性。
在下一课程中,我们将学习 NestJS 的控制器 (Controllers),了解如何使用控制器处理 HTTP 请求和响应。