# UniApp 小程序调试记录 > 日期: 2026-05-14 | 分支: feat/media-library-banner ## 已解决的问题 ### 1. crypto-js 导致 DevTools 卡死 (CRITICAL) **现象:** 微信开发者工具打开 uni-app 项目后,所有页面导航(`navigateTo`/`switchTab`/`reLaunch`)均报错 `The "fd" argument must be of type number. Received undefined`,DevTools 完全无响应。 **根因:** `crypto-js` 包在初始化时尝试通过 `commonjsRequire` 加载 Node.js 的 `crypto` 模块(vendor.js 第 8113-8115 行)。微信 DevTools 运行在 Node.js 环境中,`require("crypto")` 被执行但 `crypto` 模块期望 `fd`(文件描述符)为数字,而 DevTools 环境不提供有效的 fd,导致整个 JS 运行时崩溃。 **修复:** 移除 `crypto-js` 依赖,`utils/secure-storage.ts` 改为直接明文存储(因为 `VITE_ENCRYPTION_KEY` 未配置时加密本来就不生效)。敏感数据通过 HTTPS + 后端加密保护。 **影响文件:** - `src/utils/secure-storage.ts` — 移除 crypto-js 引用 - `package.json` — 移除 crypto-js 依赖 - `vendor.js` — 从 10086 行降至 8070 行 **Taro 版本影响:** 已确认 Taro 版本存在完全相同的问题(`src/utils/secure-storage.ts` 同样引用 crypto-js)。已于 2026-05-14 同步修复:移除 crypto-js 依赖,改写为明文存储降级。编译产物验证无 crypto-js 残留。 ### 2. 401 无限循环风险 (HIGH) **现象:** `request.ts` 中 401 处理程序重试请求时没有最大重试次数限制,可能导致 `401 → refresh → retry → 401 → ...` 无限循环。 **修复:** 添加 `retryCount401` 计数器和 `MAX_401_RETRY = 1` 限制。 ### 3. 登录后 redirectTo 子包页面 (HIGH) **现象:** `login/index.vue` 中医生角色登录后用 `redirectTo` 导航到子包页面 `/pages-sub/doctor/index`,可能不可靠。 **修复:** 改为 `reLaunch`。 ### 4. Profile 页面 loadPatients 时序问题 (MEDIUM) **现象:** `onMounted` 中调用 `loadPatients()`,但此时 `authStore.user` 可能还没通过 `onShow` 的 `restore()` 恢复。 **修复:** 将 `loadPatients()` 移到 `onShow` 回调中,在 `restore()` 之后执行。 ### 5. automationAudits 配置缺失 **现象:** uni-app 的 `manifest.json` 中缺少 `automationAudits: true`,导致 MCP 连接时 DevTools 的自动化端口不开启。 **修复:** 在 `manifest.json` 的 `mp-weixin.setting` 中添加 `"automationAudits": true`。 ## 待解决的问题 ### 6. reLaunch 后 navigateTo 失败 (INVESTIGATING) **现象:** `wx.reLaunch({ url: '/pages/index/index' })` 成功后,`wx.navigateTo` 到子包页面报 `timeout`。MCP 的 `navigate` 工具有时超时但页面实际已加载。 **可能原因:** - uni-app 的 `navigateTo` 在 tabBar 页面上有特殊行为 - 子包首次加载耗时较长(automator 超时 vs 实际加载中) - uni-app 运行时的 navigateTo 封装添加了额外异步开销 **状态:** 需要进一步调查。MCP navigate 超时后页面可能仍在后台加载成功。 ## Taro 版本同步修复 > 2026-05-14 下午 — 同步修复 Taro 版本(主项目) ### 7. Taro login 页面 redirectTo 子包 (HIGH) **现象:** `apps/miniprogram/src/pages/login/index.tsx` 第 19 行使用 `Taro.redirectTo({ url: '/pages/doctor/index' })`,与 uni-app 相同问题。 **修复:** 改为 `Taro.reLaunch`。 ### 8. Taro request.ts 401 无限重试 (HIGH) **现象:** `apps/miniprogram/src/services/request.ts` 中 401 处理递归调用 `request()` 无最大重试次数限制。 **修复:** 添加 `retryCount401` 计数器和 `MAX_401_RETRY = 1` 限制,与 uni-app 修复一致。 ### 9. Taro navigateTo:fail timeout (INVESTIGATING) **现象:** 用户报告 DevTools 控制台显示 `navigateTo:fail timeout`、`SharedArrayBuffer` 警告、` padding` 警告。 **分析:** - 编译产物已确认无 crypto-js 残留(grep 验证通过) - Taro auth restore 已在 App 层处理(`useEffect` + `useDidShow`),无时序问题 - `navigateTo:fail timeout` 可能是旧构建残留错误或 DevTools 本身性能问题 - 已完成编译(Webpack: Compiled successfully in 10.30s),修复已包含在产物中 **状态:** 需要用新编译产物重新打开 DevTools 验证。 ## MCP 连接配置 **关键配置:** `.mcp.json` 中 `WEAPP_PROJECT_PATH` 指向 `dist/dev/mp-weixin`(dev 编译输出)。 **启动流程:** 1. 运行 `npx uni -p mp-weixin` 启动 dev 编译 2. 等待编译完成(约 20 秒) 3. `"D:/微信web开发者工具/cli.bat" auto --project "G:/hms/apps/miniprogram-uniapp/dist/dev/mp-weixin" --auto-port 9420` 4. MCP `connect` 连接 **注意:** 必须先关闭所有 DevTools 实例再启动,否则会打开错误的项目。