# 10 本地运行与发布

本文档定义新项目的本地开发、构建、发布与环境管理规范。目标：让任何新同学在最短步骤内跑起来、可调试、可测试、可发布。

## 10.1 环境与工具链（建议）

- Node.js：LTS
- 包管理：pnpm（或 npm/yarn 任选其一，但全项目统一）
- 语言：TypeScript
- 代码规范：ESLint + Prettier（统一格式）
- 测试：Vitest/Jest（单元），Playwright（端到端，可选）

## 10.2 运行模式

### 10.2.1 开发模式

- 本地开发服务器
- 支持热更新（UI 与内容配置）
- 支持注入调试指令：
  - 跳时间
  - 生成物品
  - 强制触发事件
  - 固定随机种子

### 10.2.2 生产模式

- 静态资源构建输出（CDN 可部署）
- API 指向正式后端
- Debug 功能默认关闭（需权限或环境开关）

## 10.3 配置管理

推荐三层配置：

- `default`：默认配置（安全值）
- `env`：按环境覆盖（dev/staging/prod）
- `runtime`：运行时下发（如内容包更新列表）

必须遵循：

- 配置不写死在代码里，使用环境变量/配置文件
- 任何密钥不得进入仓库

## 10.4 内容包发布流程（建议）

内容包与代码版本解耦：

1. 内容策划提交内容包（JSON + 校验通过）
2. CI 跑 Schema 校验、引用检查、权重表检查
3. 内容包发布到 CDN/对象存储
4. 后端返回最新内容包清单与版本号
5. 客户端启动时拉取并缓存（可按需更新）

## 10.5 发布策略

### 10.5.1 版本号约定

- 客户端版本：SemVer
- 内容包版本：SemVer
- 存档版本：整数递增 `saveVersion`

### 10.5.2 回滚策略

- 客户端回滚：CDN 指向上一个构建
- 内容包回滚：清单回滚到上一版本
- 存档兼容：
  - 向前兼容：旧存档可迁移到新版本
  - 向后兼容：新存档回滚到旧版本通常不可行，需提示

## 10.6 监控与日志（建议）

- 客户端错误上报：
  - JS 异常
  - 资源加载失败
  - 存档校验失败
- 关键事件埋点：
  - 新手完成率
  - 出行次数/死亡原因
  - 关键科技解锁天数
  - 任务链完成率

## 10.7 旧版仓库运行注意（仅用于参考）

当前仓库是静态网页 + AJAX 动态加载脚本，且在 [loader.js](file:///Users/virtheart/Documents/CloneProjects/TinyWaste/data/loader.js#L15-L23) 有域名跳转逻辑，本地直接打开可能会跳转到线上域名。旧版本地跑需要静态服务器并绕过域名限制。

新项目不会延续这种加载方式，会采用现代构建输出与模块化加载。

