Files
mindfulness/spec_kit/Client Bootstrap/tasks.md
吕新雨 049995692d init
2026-01-28 20:50:17 +08:00

131 lines
6.1 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.
# Client Bootstrap任务清单
> 说明:本清单根据 `plan.md` 拆解,要求“可执行、可验收、可标记”。
> 标记规则:执行完成后将对应项从 `- [ ]` 改为 `- [x]`,并把“状态”改为 **已完成**;进行中改为 **进行中**;阻塞写明原因与解除条件。
## 0. 清单状态说明
- **状态**:未开始 / 进行中 / 已完成 / 阻塞
- **阻塞**:必须写明阻塞点(例如“缺少 Expo 工程代码”)与下一步需要谁提供什么
## 1. 文档完善README 为准入门)
- [x] **更新 `client/README.md` 的包管理器命令统一为 pnpm**
- **状态**:已完成
- **内容**:将 `npm install``npm run *` 改为 `pnpm install``pnpm *`(或在 README 中明确“团队统一 pnpm”且给出 pnpm 命令为主)
- **验收**README 中安装/启动/平台命令不混用 npm/pnpm
- [x] **补充 i18n “设置页切换语言”的落地说明**
- **状态**:已完成
- **内容**:在多语言章节增加“语言优先级:用户设置 > 设备语言 > 默认回退zh-CN”与“设置入口建议位置”
- **验收**README 的 i18n 规则与 `spec.md/plan.md` 完全一致
## 2. 初始化 Expo 工程(若仓库尚未提交客户端代码)
> 若 `client/` 下已经存在 Expo 工程(`package.json`、`app.json/app.config.*`),跳过本章节并在任务上标记“已完成(已存在)”。
- [x] **在 `client/` 初始化 Expo + TypeScript 工程**
- **状态**:已完成
- **命令**
- `cd client`
- `npx create-expo-app@latest .`(按提示选择 TypeScript 模板)
- **产出**:生成 `package.json``app.json/app.config.*``assets/`、入口代码等
- **验收**`client/` 下存在可运行的 Expo 工程基础文件
- [x] **切换为 pnpm 并安装依赖**
- **状态**:已完成
- **命令**
- `cd client`
- `pnpm install`
- **验收**:依赖安装成功,可执行 `pnpm start`
## 3. 建立标准目录结构(目标态)
- [x] **创建标准目录骨架(`app/` + `src/` + `assets/`**
- **状态**:已完成
- **目录**
- `app/`expo-router 路由目录,若采用)
- `src/components/`
- `src/constants/`
- `src/features/push/`
- `src/features/widget/`
- `src/features/cards/`
- `src/hooks/`
- `src/i18n/locales/`
- `src/services/`
- `src/store/`
- `src/types/`
- `src/utils/`
- **验收**:目录与 `client/README.md` 中的“标准目录结构”一致
## 4. 接入 i18n 基座CN/EN/ES/PT/TC
- [x] **引入 i18n 依赖并记录版本**
- **状态**已完成i18next@25.8.0 / react-i18next@16.5.4 / expo-localization@17.0.8 / AsyncStorage@2.2.0
- **依赖**`i18next``react-i18next``expo-localization`(如需持久化再加 `@react-native-async-storage/async-storage`
- **验收**`package.json` 中依赖齐全,且能正常打包/运行
- [x] **创建语言资源文件5 份)**
- **状态**:已完成
- **文件**
- `src/i18n/locales/zh-CN.json`
- `src/i18n/locales/en.json`
- `src/i18n/locales/es.json`
- `src/i18n/locales/pt.json`
- `src/i18n/locales/zh-TW.json`
- **内容要求**:至少包含 `common.ok/common.cancel` 等最小 key 集合(五种语言都要齐全)
- **验收**:同一 key 在 5 个文件都存在,不允许缺 key
- [x] **实现 `src/i18n/index.ts` 初始化与语言优先级**
- **状态**:已完成
- **规则**
- ① 用户设置语言(存在则优先)
- ② 设备语言(在支持列表内)
- ③ 默认回退(`zh-CN` 或团队指定默认)
- **验收**:能在运行时切换语言并立即生效;重启后仍保持用户选择
- [x] **提供语言设置的状态存储与 API供设置页调用**
- **状态**:已完成(已提供 `getLanguagePreference/setLanguagePreference/changeLanguage/clearLanguagePreference`
- **建议**`src/store/``src/features/settings/`(如后续新增)暴露 `setLanguage/getLanguage`
- **验收**:设置页接入时只需调用一个清晰接口即可完成切换
## 5. 环境变量与联调基座
- [x] **补齐 `.env.example` 并规范 `.env.dev/.env.prod`**
- **状态**:已完成(已创建 `.env.example`;注意该文件在当前环境会被 globalignore 过滤,终端可见但编辑工具不可见)
- **字段**`EXPO_PUBLIC_API_BASE_URL``EXPO_PUBLIC_ENV`
- **验收**:文档与实际读取方式一致;真机联调注意事项明确
- [ ] **实现 API 客户端封装(`src/services/`**
- **状态**:未开始
- **要求**:从 `EXPO_PUBLIC_API_BASE_URL` 读取 baseURL统一错误处理与超时策略先给默认
- **验收**:任意页面可通过统一 client 发起请求,且环境切换能影响 baseURL
## 6. 模块骨架push/widget/cards
- [ ] **Push 模块:权限/Token/上报接口占位**
- **状态**:未开始
- **要求**:提供最小 API例如 `requestPermission() / getToken() / reportToken()`
- **验收**:模块对外 API 清晰,后续联调只需补实现不需改结构
- [ ] **Widget 模块:数据模型/缓存/刷新策略文档化与占位**
- **状态**:未开始
- **要求**:定义“情绪文案数据结构”、缓存 key、刷新建议强调 iOS 限制)
- **验收**:能明确后续 iOS 小组件实现需要的数据与刷新行为
- [ ] **Cards 模块:数据模型与卡片滑动组件占位**
- **状态**:未开始
- **验收**:后续 UI 实现可以直接在该模块内扩展,不破坏目录约定
## 7. EAS BuildiOS 打包链路)
- [ ] **创建并配置 `eas.json`development profile**
- **状态**:未开始
- **要求**:区分 dev/prod注入对应环境变量bundle id 符合约定
- **验收**:可触发 iOS development 构建并产出安装包/构建产物
- [ ] **验证 iOS 构建最小闭环**
- **状态**:未开始
- **验收**构建成功App 能启动;基础 i18n 与环境变量读取无崩溃