Files
fire_goal/docs/04-风险与避坑.md
T
ilaandClaude Sonnet 4.6 9e7d20f062 docs: document pnpm EACCES issue on WSL2 Windows filesystem
pnpm fails with permission denied during atomic rename on /mnt/d/ (NTFS).
Solution: keep app/ on WSL2 native fs (~/fire_goal/app/).

- 04-风险与避坑.md: add as 三级坑 with cause, fix, and principle
- 03-架构设计.md: add WSL2 native path requirement with HBuilderX access path

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 10:17:31 +08:00

63 lines
4.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.
# 04 · 风险与避坑
> uni-app 开发本类 app(自托管财务 + 多端 + 自律打卡)会踩的坑,按对本项目的杀伤力排序。
## ✅ 已化解:原一级坑「小程序 ✕ 自托管后端」
> 用户已具备**腾讯云 VPS + 域名 + certbot(Let's Encrypt)HTTPS**,后端从家用 NAS 迁到公网 VPS,此坑基本解除。
微信小程序对后端的硬性要求:**强制 HTTPS + 域名已备案 + request 合法域名白名单**,**不接受 IP / 内网地址 / 自签证书**。
- **现状**:VPS 公网 IP + 正经域名 + certbot 正规证书 → **HTTPS、合法证书、公网域名均满足**;App / H5 后端要求**全部达标**。
- **小程序仅剩一步**:**域名 ICP 备案**(腾讯云可办)+ 在小程序后台配 request 合法域名白名单。备案完成后小程序即可纳入。
- **遗留注意**:后端已暴露公网,需做安全加固(端口最小化、强鉴权、限流、强制 HTTPS、SSH 密钥 + fail2ban、SQLite 定时备份)——详见架构文档第六节。
### 2. 跨端"本地存储 + 离线同步"无统一方案
各端存储能力不同(H5 IndexedDB / App SQLite / 小程序 storage 约 10MB),且 uni 无现成离线同步轮子(uniCloud 绑 DCloud 云,用不上)。
- **规避**:① 做"存储抽象层"分端实现;② 同步用最简单的**时间戳 + 后写覆盖**;③ 历史数据以后端为准,本地仅缓存。
## 🟡 二级坑:拖慢进度、磨耐心
### 3. 图表 canvas 坑
uCharts/qiun-data-charts 基于 canvas:小程序里 canvas 层级最高会盖住弹窗、数据多会卡、nvue 下行为又不同。
- **规避**:统一用 qiun-data-charts;图表页不用 nvue;数据抽稀。
### 4. iOS 云打包 / 证书第一次必踩
`.p12` + `.mobileprovision` + bundleId 配置繁琐,首次几乎一定失败;云打包免费版有排队/次数限制。
- **规避**:跟香蕉云编/Appuploader 图文教程走,预留半天踩证书。
### 5. iOS 审核:金融类是高拒审区
工具内容单薄触发 4.2「最低功能」;涉及"理财/投资/收益"可能触发 3.1.1 或被要求金融资质(个人开发者难)。
- **规避**:**自用就别上架**(用 ad-hoc / PWA);若上架,措辞避开"投资建议/收益",定位"个人记账与目标管理工具"。
### 6. 样式多端不一致
rpx 换算、iOS 安全区、状态栏、**键盘顶起输入框**、滚动穿透等表现各端不同;测算器输入框多,键盘遮挡尤甚。
- **规避**:用 uni 安全区变量、page-meta;表单做键盘适配测试。
## 🟢 三级坑:知道即可
- **pnpm 在 /mnt/d/ 上权限报错(已踩)**:WSL2 挂载的 Windows NTFS 磁盘(`/mnt/d/`)不支持原子重命名操作,pnpm install 时报 `EACCES: permission denied, rename ...`。
- **解决**:把 `app/` 移到 WSL2 原生文件系统(`~/fire_goal/app/`),pnpm 在原生 fs 上无此问题;Windows 侧通过 `\\wsl$\Ubuntu\home\用户名\fire_goal\app` 访问(HBuilderX 云打包用此路径)。
- **原则**:开发目录放 WSL2 原生 fs(`~`),文档/配置等只读文件可留 `/mnt/d/`。
- **nvue 陷阱**:只支持 flex、CSS 受限、与 vue 混用割裂 → **全程用普通 vue 页面,不碰 nvue**。
- **插件市场质量参差**:收费/失修/文档差,跨端 bug 难定位 → 少依赖第三方原生插件。
- **HBuilderX 耦合**:云打包/原生插件偏 GUI;CLI 项目导入偶有适配问题 → 用 HBuilderX 友好的结构搭项目。
- **wgt 热更新**:iOS 政策禁止用热更新改核心功能/绕审核,上架要克制(自用可放心)。
- **股票行情/分红数据源**:无稳定免费官方 API,第三方不稳、小程序卡白名单 → 持仓页**先手动录入**。
## 🎯 本项目最该担心的 Top 3(已更新)
1. ~~小程序 vs 自托管 NAS 的 HTTPS 矛盾~~ → **已由 VPS + 域名 + certbot 化解**;小程序只剩域名备案。
2. **跨端存储 + 离线同步要自己造** → 存储抽象层 + 简单时间戳同步。(当前头号难点)
3. **iOS 金融类上架/证书** → 自用不上架,走 PWA/ad-hoc,规避资质风险。
4. **公网后端安全**(新增)→ VPS 暴露财务数据于公网,须加固(见架构文档第六节)。
## 避坑总原则
- 范围先收:**第一版只做 H5(PWA) + 安卓包**(安卓出包免费免账号)。
- iOS 等界面稳定后再云打包。
- 小程序**待域名备案完成后**即可纳入(不再是硬阻塞)。
- 后端上公网即做安全加固。
- 全程普通 vue + qiun-data-charts + 存储抽象层;不碰 nvue、少用第三方原生插件。
- 持仓/分红先手动录入,不接实时行情。