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>
4.6 KiB
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(已更新)
小程序 vs 自托管 NAS 的 HTTPS 矛盾→ 已由 VPS + 域名 + certbot 化解;小程序只剩域名备案。- 跨端存储 + 离线同步要自己造 → 存储抽象层 + 简单时间戳同步。(当前头号难点)
- iOS 金融类上架/证书 → 自用不上架,走 PWA/ad-hoc,规避资质风险。
- 公网后端安全(新增)→ VPS 暴露财务数据于公网,须加固(见架构文档第六节)。
避坑总原则
- 范围先收:第一版只做 H5(PWA) + 安卓包(安卓出包免费免账号)。
- iOS 等界面稳定后再云打包。
- 小程序待域名备案完成后即可纳入(不再是硬阻塞)。
- 后端上公网即做安全加固。
- 全程普通 vue + qiun-data-charts + 存储抽象层;不碰 nvue、少用第三方原生插件。
- 持仓/分红先手动录入,不接实时行情。