180 lines
4.5 KiB
Markdown
180 lines
4.5 KiB
Markdown
# Pixel Game Server
|
||
|
||
一个基于 NestJS 的 2D 像素风游戏后端服务
|
||
|
||
## 技术栈
|
||
|
||
- **NestJS** `^10.0.0` - 渐进式 Node.js 框架
|
||
- **TypeScript** `^5.3.0` - 类型安全
|
||
- **Socket.IO** - WebSocket 实时通信支持
|
||
- **RxJS** `^7.8.1` - 响应式编程库
|
||
|
||
### 核心依赖
|
||
|
||
**生产环境:**
|
||
- `@nestjs/common` `^10.0.0` - NestJS 核心功能
|
||
- `@nestjs/core` `^10.0.0` - NestJS 核心模块
|
||
- `@nestjs/platform-express` `^10.0.0` - Express 平台适配器
|
||
- `@nestjs/websockets` `^10.0.0` - WebSocket 支持
|
||
- `@nestjs/platform-socket.io` `^10.0.0` - Socket.IO 适配器
|
||
- `reflect-metadata` `^0.1.13` - 装饰器元数据支持
|
||
- `rxjs` `^7.8.1` - 响应式编程
|
||
|
||
**开发环境:**
|
||
- `@nestjs/cli` `^10.0.0` - NestJS 命令行工具
|
||
- `@nestjs/schematics` `^10.0.0` - NestJS 代码生成器
|
||
- `@types/node` `^20.0.0` - Node.js 类型定义
|
||
- `ts-node` `^10.9.0` - TypeScript 运行时
|
||
- `typescript` `^5.3.0` - TypeScript 编译器
|
||
|
||
## 开发规范
|
||
|
||
### 命名规范
|
||
|
||
项目采用统一的命名规范,确保代码风格一致:
|
||
|
||
- **文件/文件夹**:下划线分隔(如 `order_controller.ts`)
|
||
- **变量/函数**:小驼峰命名(如 `userName`、`async queryUserInfo()`)
|
||
- **类/构造函数**:大驼峰命名(如 `UserModel`、`OrderService`)
|
||
- **常量**:全大写 + 下划线(如 `PORT`、`DB_HOST`)
|
||
- **接口路由**:全小写 + 短横线(如 `/user/get-info`、`/order/create-order`)
|
||
|
||
详细规范请查看:[命名规范文档](./docs/naming_convention.md)
|
||
|
||
### Git 提交规范
|
||
|
||
项目采用约定式提交规范,提交信息格式:`<类型>:<简短描述>`
|
||
|
||
**常用提交类型:**
|
||
|
||
- `feat` - 新增功能
|
||
- `fix` - 修复 Bug
|
||
- `docs` - 文档更新
|
||
- `style` - 代码格式调整
|
||
- `refactor` - 代码重构
|
||
- `perf` - 性能优化
|
||
- `test` - 测试相关
|
||
- `chore` - 构建/工具变动
|
||
|
||
**后端特定类型:**
|
||
|
||
- `api` - API 接口
|
||
- `db` - 数据库
|
||
- `websocket` - WebSocket
|
||
- `auth` - 认证授权
|
||
- `dto` - 数据传输对象
|
||
- `service` - 服务层
|
||
|
||
**核心原则:**
|
||
|
||
- ⭐ 一次提交只做一件事
|
||
- 使用中文冒号 `:`
|
||
- 简短明确(不超过 50 字符)
|
||
- 能拆分就拆分,保持提交历史清晰
|
||
|
||
**示例:**
|
||
|
||
```bash
|
||
git commit -m "feat:实现玩家注册和登录功能"
|
||
git commit -m "fix:修复房间加入时的并发问题"
|
||
git commit -m "api:添加玩家信息查询接口"
|
||
```
|
||
|
||
详细规范请查看:[Git 提交规范文档](./docs/git_commit_guide.md)
|
||
|
||
## 文档
|
||
|
||
- [NestJS 使用指南](./docs/nestjs_guide.md) - 详细的 NestJS 开发指南,包含实战案例
|
||
- [命名规范](./docs/naming_convention.md) - 项目命名规范和最佳实践
|
||
- [Git 提交规范](./docs/git_commit_guide.md) - Git 提交信息格式和最佳实践
|
||
|
||
## 前置要求
|
||
|
||
- **Node.js** >= 18.0.0
|
||
- **pnpm** >= 8.0.0(推荐)
|
||
|
||
如果还没有安装 pnpm,请先安装:
|
||
|
||
```bash
|
||
npm install -g pnpm
|
||
```
|
||
|
||
检查版本:
|
||
|
||
```bash
|
||
node --version
|
||
pnpm --version
|
||
```
|
||
|
||
## 安装依赖
|
||
|
||
```bash
|
||
pnpm install
|
||
```
|
||
|
||
**注意**:首次安装时,pnpm 可能会提示需要批准构建脚本。这是 pnpm 的安全特性,用于防止恶意脚本执行。
|
||
|
||
如果看到以下警告:
|
||
|
||
```
|
||
Warning: Ignored build scripts: @nestjs/core.
|
||
Run "pnpm approve-builds" to pick which dependencies should be allowed to run scripts.
|
||
```
|
||
|
||
请运行以下命令批准 NestJS 的构建脚本:
|
||
|
||
```bash
|
||
pnpm approve-builds
|
||
```
|
||
|
||
然后选择批准 `@nestjs/core` 和其他 NestJS 相关包的构建脚本。
|
||
|
||
## 开发
|
||
|
||
启动开发服务器(支持热重载):
|
||
|
||
```bash
|
||
pnpm dev
|
||
```
|
||
|
||
服务器将运行在 `http://localhost:3000`
|
||
|
||
## 构建
|
||
|
||
```bash
|
||
pnpm build
|
||
```
|
||
|
||
## 生产环境运行
|
||
|
||
```bash
|
||
pnpm start:prod
|
||
```
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
src/
|
||
├── api/ # API 接口层(控制器、网关)
|
||
├── config/ # 配置文件
|
||
├── data/ # 数据访问层(数据库、缓存)
|
||
├── model/ # 数据模型、实体、DTO
|
||
├── service/ # 业务逻辑层
|
||
├── utils/ # 工具函数
|
||
├── main.ts # 应用入口
|
||
├── app.module.ts # 根模块
|
||
├── app.controller.ts # 根控制器
|
||
└── app.service.ts # 根服务
|
||
test/
|
||
├── api/ # API 测试
|
||
└── service/ # 服务测试
|
||
```
|
||
|
||
## 下一步
|
||
|
||
- 在 `src/api/` 目录下创建游戏相关的控制器和网关
|
||
- 在 `src/model/` 目录下定义游戏数据模型
|
||
- 在 `src/service/` 目录下实现游戏业务逻辑
|
||
- 使用 NestJS CLI 快速生成模块:`nest g module game`
|
||
- 添加 WebSocket 网关实现实时游戏逻辑
|