Files
fire_goal/docs/04-风险与避坑.md
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

4.6 KiB
Raw Permalink Blame History

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、少用第三方原生插件。
  • 持仓/分红先手动录入,不接实时行情。