# Fmode App v2 · 数字生命客户端 Fmode 双端 IM 中枢:桌面横版工作台(`/desktop/**`)+ 手机竖版(`/mobile/**`)。 Angular 20 standalone SPA,无自建后端 —— 数据全部经 fmode 平台云函数 + Matrix。 ## 环境与命令 | 命令 | 构建配置 | 数据源 | 用途 | |---|---|---|---| | `npm start` | development | 真实后端 | 日常开发(http://localhost:4200) | | `npm run start:local` | local | 真实后端(`environment.local.ts`) | 指向测试/预发环境联调 | | `npm run start:mock` | mock | 演示数据 | 无后端时走 UI / 看设计 | | `npm run build` | production | 真实后端 | **部署用** | | `npm run build:mock` | mock-production | 演示数据 | 冒烟测试、演示包 | | `npm test` | — | — | 单测(Karma + Jasmine) | | `npm run smoke` | — | — | 双端全路由冒烟(需先 `npm run build:mock`) | | `npm run verify:ui` | — | — | UI 规范断言 | | `npm run deploy` | production | 真实后端 | 构建 + 上传 OBS + 刷新 CDN | ### 环境切换 后端地址**只有一个真源**:`src/environments/environment.base.ts`。 各环境文件继承它,只覆盖自己需要的字段。 - **本地指向测试环境**:复制 `environment.local.example.ts` → `environment.local.ts` 改地址,跑 `npm run start:local`。 该文件不入库(`.gitignore`)。 - **不要**为了切环境去改 `environment.base.ts`,否则所有人一起变。 数据源开关 `useMockData` 是唯一的数据层分支:`true` = MockApi,`false` = ParseApi。 `npm start` / `npm run build` 恒为 `false`;演示态只能通过 `mock` 系列配置进入。 ## 部署 前置条件(只需一次): ```bash # obsutil:https://support.huaweicloud.com/utiltg-obs/obs_11_0003.html # hcloud :https://support.huaweicloud.com/utiltg-hcloudcli/hcloudcli_01_0002.html obsutil config -i= -k= -e=obs.cn-south-1.myhuaweicloud.com hcloud configure set --cli-profile=default --cli-access-key= --cli-secret-key= ``` 凭据只存本机 CLI 配置,**不进仓库、不进脚本**。 ```bash npm run deploy # 完整流程 node scripts/deploy.mjs --skip-build # 复用已有 dist node scripts/deploy.mjs --dry-run # 只打印动作 ``` 流程:构建 → 产物自检(拦截演示包/空产物)→ sync 到 OBS → 设 public-read → 刷新 CDN → 探活。 > ⚠️ OBS 静态托管的 SPA 深链(直接访问 `/desktop/chat`)需要在桶的**静态网站配置** > 里把错误文档设为 `index.html`;否则刷新深链会 404。这一项在华为云控制台配置,代码侧无法替代。 ## 目录 ``` src/app/ core/ 共享服务(数据访问、Matrix、会话、路由守卫…) components/ 业务外壳组件(会话树、消息气泡、预览…) ui/ ui-kit 官方组件底座(整目录接入,禁改业务无关代码) desktop/ 桌面端 shell + pages mobile/ 移动端 shell + pages pages/ 双端共用页面(入口、登录) src/environments/ 环境配置(base 为地址真源) scripts/ 构建/校验/冒烟/部署脚本 ``` ## 已知限制 - 主包 gzip 约 146 kB,超出 `production` 的 500 kB(原始体积)警告线,属已知、不阻塞。 - `fetchTasks` / `fetchTaskDetail` 云函数接收端未实现,前端显式抛错。 - `tasks[]` 多任务字段在存量系统中从未落库。 ### 本机 CLI 安装状态(2026-11-02) 已安装并配置(仅本机,不入库): | 工具 | 路径 | 配置 | |---|---|---| | obsutil 5.8.9 | `%USERPROFILE%\tools\obsutil\obsutil_windows_amd64_5.8.9` | `%USERPROFILE%\.obsutilconfig` | | hcloud (KooCLI) | `%USERPROFILE%\tools\hcloud` | profile `default`,含 `cli-domain-id` | 两者均已加入用户 `PATH`,新开终端直接可用。