From 6a423da5f0df513b5ccb19ef68ed1eeaf882ac4c Mon Sep 17 00:00:00 2001 From: Peanut Date: Wed, 18 Mar 2026 22:44:26 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=88=9B=E5=BB=BA=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E8=AF=8A=E6=96=AD=E6=97=A5=E5=BF=97=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 env.js 环境配置日志任务 - 添加 request.js API 请求日志任务 - 定义验证步骤和故障排查指南 Co-Authored-By: Claude Opus 4.6 --- ...03-18-mini-program-diagnostic-logs-plan.md | 261 ++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 docs/superpowers/plans/2026-03-18-mini-program-diagnostic-logs-plan.md diff --git a/docs/superpowers/plans/2026-03-18-mini-program-diagnostic-logs-plan.md b/docs/superpowers/plans/2026-03-18-mini-program-diagnostic-logs-plan.md new file mode 100644 index 0000000..590feef --- /dev/null +++ b/docs/superpowers/plans/2026-03-18-mini-program-diagnostic-logs-plan.md @@ -0,0 +1,261 @@ +# 小程序体验版诊断日志功能实现计划 + +> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 在小程序 env.js 和 request.js 中添加诊断日志,用于定位体验版无法调用接口的问题 + +**Architecture:** 在两个关键位置添加条件日志:env.js 的 getConfig() 函数输出环境配置解析结果,request.js 的请求/响应回调输出 API 调用详情,仅在 DEBUG=true 时打印 + +**Tech Stack:** UniApp, Vue 3, JavaScript, console.log, uni.request + +--- + +## Chunk 1: env.js 环境配置日志 + +### Task 1: 在 env.js 中添加环境配置诊断日志 + +**Files:** +- Modify: `mini-program/src/config/env.js:35-46` (getConfig 函数) + +**前置检查:** 确认当前 env.js 的 getConfig 函数结构 + +- [ ] **Step 1: 读取 env.js 当前内容** + +读取文件确认 `getConfig()` 函数的确切代码结构 + +- [ ] **Step 2: 修改 getConfig 函数添加日志** + +在 `getConfig()` 函数的 return 语句之前添加: + +```javascript + // 添加诊断日志 + if (debug) { + console.log('[ENV] 环境配置:', { + rawEnv: import.meta.env.VITE_APP_ENV, + normalizedEnv: currentEnv, + API_BASE_URL: apiBaseUrl, + WS_URL: wsUrl, + DEBUG: debug, + isFromEnvFile: import.meta.env.VITE_API_BASE_URL ? 'yes' : 'fallback-to-config' + }) + } +``` + +- [ ] **Step 3: 验证代码语法** + +运行: +```bash +cd mini-program +npm run dev:h5 +``` +预期:开发服务器启动,无语法错误 + +- [ ] **Step 4: 提交** + +```bash +git add mini-program/src/config/env.js +git commit -m "feat: 添加 env.js 环境配置诊断日志 + +- 在 getConfig() 函数中添加条件日志输出 +- 输出原始环境变量、解析后配置、来源标识 +- 仅在 DEBUG=true 时打印" +``` + +--- + +## Chunk 2: request.js API 请求日志 + +### Task 2: 在 request.js 中添加请求日志 + +**Files:** +- Modify: `mini-program/src/services/request.js:25-56` (request 函数) + +**前置检查:** 确认 request.js 的当前结构和 import 语句 + +- [ ] **Step 1: 读取 request.js 当前内容** + +确认 `request()` 函数的确切代码结构和导入语句 + +- [ ] **Step 2: 添加 debug 变量获取和请求日志** + +在 `request()` 函数开头添加: + +```javascript +const request = (options) => { + const debug = getEnvValue('DEBUG') + const fullUrl = `${API_BASE_URL}${options.url}` + + // 请求日志 + if (debug) { + console.log('[API Request]', { + method: options.method || 'GET', + url: fullUrl, + path: options.url, + env: import.meta.env.VITE_APP_ENV + }) + } + + return new Promise((resolve, reject) => { + uni.request({ + url: fullUrl, + // ... 其余代码 +``` + +- [ ] **Step 3: 修改 success 回调添加响应日志** + +在 success 回调中,`const { data, statusCode } = res` 之后添加: + +```javascript +// 响应日志 +if (debug) { + console.log('[API Response]', { + path: options.url, + status: statusCode, + code: data?.code, + success: data?.code === 200 || data?.code === 0 + }) +} +``` + +- [ ] **Step 4: 修改 fail 回调添加错误日志** + +在 fail 回调中添加: + +```javascript +fail: (err) => { + // 错误日志 + if (debug) { + console.error('[API Error]', { + path: options.url, + error: err.errMsg, + env: import.meta.env.VITE_APP_ENV + }) + } + reject(new Error(err.errMsg || '网络错误')) +} +``` + +- [ ] **Step 5: 验证代码语法** + +运行: +```bash +cd mini-program +npm run dev:h5 +``` +预期:开发服务器启动,无语法错误,浏览器 Console 可见日志输出 + +- [ ] **Step 6: 提交** + +```bash +git add mini-program/src/services/request.js +git commit -m "feat: 添加 request.js API 请求诊断日志 + +- 在 request() 函数中添加请求/响应/错误日志 +- 输出完整 URL、状态码、错误信息 +- 仅在 DEBUG=true 时打印" +``` + +--- + +## Chunk 3: 验证和测试 + +### Task 3: 编译体验版并验证日志输出 + +**Files:** +- Test: 手动验证编译后的体验版 + +- [ ] **Step 1: 编译体验版代码** + +```bash +cd mini-program +npm run build:mp-weixin:test +``` +预期:编译成功,输出目录 `unpackage/dist/test/mp-weixin` + +- [ ] **Step 2: 微信开发者工具导入** + +1. 打开微信开发者工具 +2. 导入目录:`unpackage/dist/test/mp-weixin` +3. 打开调试面板(Console) + +- [ ] **Step 3: 触发登录请求** + +1. 在登录页面输入手机号(如 19928748688) +2. 点击"获取验证码"按钮 +3. 观察 Console 输出 + +- [ ] **Step 4: 检查日志输出** + +确认看到以下日志: +``` +[ENV] 环境配置:{ + rawEnv: "test", + normalizedEnv: "test", + API_BASE_URL: "https://lifescript.happylifeos.com/api", ← 确认是 HTTPS + WS_URL: "wss://lifescript.happylifeos.com/ws", + DEBUG: true, + isFromEnvFile: "yes" +} +[API Request] { + method: "GET", + url: "https://lifescript.happylifeos.com/api/auth/sms-code", + path: "/auth/sms-code", + env: "test" +} +``` + +- [ ] **Step 5: 记录诊断结果** + +根据日志输出判断: +- 如果 API_BASE_URL 是 HTTP IP → .env.test 未注入,检查构建配置 +- 如果 API_BASE_URL 正确但连接失败 → 微信域名白名单或 SSL 问题 +- 如果无日志输出 → DEBUG 标志或编译模式问题 + +- [ ] **Step 6: 提交验证报告** + +将日志输出截图或文本记录到 issue 或文档中 + +--- + +## 完成标准 + +- [ ] env.js 添加了环境配置诊断日志 +- [ ] request.js 添加了请求/响应/错误日志 +- [ ] 日志仅在 DEBUG=true 的环境(dev/test)打印 +- [ ] 体验版编译成功 +- [ ] 微信开发者工具中可见日志输出 +- [ ] 能够确认 API_BASE_URL 的实际值 + +--- + +## 故障排查指南 + +### 问题 1:没有日志输出 + +**可能原因:** +1. DEBUG 标志未正确设置 +2. 编译模式不正确(应使用 test 模式) + +**解决方法:** +```bash +# 确认使用 test 模式编译 +npm run build:mp-weixin:test +``` + +### 问题 2:API_BASE_URL 是 HTTP IP 而非 HTTPS 域名 + +**可能原因:** .env.test 文件未被 Vite 正确读取 + +**解决方法:** +1. 检查 .env.test 文件是否存在且格式正确 +2. 检查 vite.config.js 中的 env 配置 +3. 尝试清理缓存后重新编译 + +### 问题 3:日志显示连接错误 + +**可能原因:** 微信域名白名单未配置或 SSL 证书问题 + +**解决方法:** +1. 确认微信公众平台已配置 request 合法域名 +2. 确认 SSL 证书有效且未过期 +3. 尝试在微信开发者工具中勾选"不校验合法域名"