Files
pixelheros/put/README.md
panFD 9c9cc99e64 feat: 重构服务支持双模式并接入 MongoDB 数据库
- 新增 MongoDB 存储层实现英雄、预设和版本数据的持久化
- 新增 push-meta 和 migrate-to-mongo 脚本支持数据同步迁移
- 支持开发版和线上设计版双模式运行
- 新增版本闸门机制,线上设计版落后时进入只读模式
- 优化前端 API 配置适配不同部署环境
- 新增线上设计版静态资源托管和路由回退
2026-10-03 12:02:47 +08:00

89 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# hero_set — 英雄配置编辑器
英雄数值/技能/触发/光环的可视化配置工具。数据存储在 **MongoDB**,编辑器产出可写回游戏工程的 `heroSet.ts` 与 `英雄设计表.csv`。
## 双版本架构
| | 项目开发版(local) | 线上设计版(remote) |
|---|---|---|
| 使用人 | 开发者 | 数值设计人员 |
| 数据 | 同一个线上 MongoDB | 同一个线上 MongoDB |
| meta 底座(技能/Buff) | 从游戏工程 TS 实时编译 | `server/data/meta.json` 快照(需随部署发布) |
| 英雄/预设 增删改 | ✅ | ✅(库结构版本更高时只读) |
| 写 heroSet.ts / 导出 CSV | ✅ | ❌(接口返回 403,按钮隐藏) |
**版本闸门**:库中 `meta` 集合存 `schemaVersion`(只升不降)。线上版启动版本低于库版本时,保存接口返回 409、前端禁用保存——防止旧结构覆盖新数据。结构有破坏性变更时:本地 `SCHEMA_VERSION` +1 → `npm run push-meta` → 重新部署线上版。
## 目录
```
put/
├── server/ # Express API(单服务托管 API + 前端静态页)
│ ├── index.js # 接口与模式/版本闸门
│ ├── db.js # MongoDB 存储层
│ ├── data/ # meta.json 快照(remote 模式必需)
│ ├── scripts/
│ │ ├── migrate-to-mongo.js # 一次性:JSON 文件 → Mongo
│ │ └── push-meta.js # 开发版:生成 meta 快照 + 抬升库版本
│ └── .env.example
└── web/ # Vue3 + Element Plus 前端
└── dist/ # 构建产物(remote 模式由 server 托管,需提交)
```
## 部署线上设计版(给 AI 部署智能体)
前置:Node.js ≥ 18;可访问的 MongoDB 连接串。
```bash
# 1. 拉代码
git clone git@git.eoxnet.com:pan/hero_set.git && cd hero_set
# 2. 配置环境变量
cp server/.env.example server/.env
# 编辑 server/.env:
# MODE=remote
# MONGO_URL=mongodb://user:pass@host:27017
# MONGO_DB=heroconfig
# PORT=3001
# 3. 构建前端
cd web && npm ci && npm run build && cd ..
# 注意:web/dist 与 server/data/meta.json 必须存在(均已随仓库提交,若仓库有更新请重新构建)
# 4. 启动(server 自动托管 web/dist,单服务即可)
cd server && npm ci && npm start
# 访问 http://<host>:3001
```
进程守护(可选):`pm2 start index.js --name hero-set --cwd server`
## 开发版工作流(本地)
```bash
# server/.env:MODE=local + 同一个 MONGO_URL
cd server && npm ci && npm run dev # API :3001
cd web && npm ci && npm run dev # 前端 :4004(已代理 /api → :3001)
```
- **保存到数据库** → 全量覆盖 MongoDB(按 uuid upsert + 删除多余)
- **写入 heroSet.ts** → 渲染进 `assets/script/game/common/config/heroSet.ts` 的 `@hero-setup:heroes-begin/end` 标记区域
- **技能/底座结构变更后**:`SCHEMA_VERSION` +1 → `npm run push-meta`(需 dev 服务已启动)→ 提交并重新部署线上版
## 环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
| `MODE` | `local` | `local` 开发版 / `remote` 线上设计版 |
| `MONGO_URL` | — | 必填,MongoDB 连接串 |
| `MONGO_DB` | `heroconfig` | 库名 |
| `PORT` | `3001` | 服务端口 |
| `SCHEMA_VERSION` | `1` | 数据结构版本,破坏性变更时 +1 |
前端单独部署(不经 server 托管)时,`web/.env` 配 `VITE_API_BASE=http://<host>:3001`。
## 数据库结构(MongoDB · heroconfig)
- `heroes`:每个英雄一条文档,`uuid` 唯一索引
- `templates`:`_id='presets'` 单文档(triggerPresets / fieldPresets)
- `meta`:`_id='version'` 单文档(schemaVersion)