Files
happy-life-star/docs/superpowers/specs/2026-04-07-mini-program-dev-workflow-design.md
T
peanut 2008d996e6 docs: 添加小程序开发工作流程设计文档
定义 H5 开发模式 + 微信开发者工具验证的双轨工作流:
- 日常开发使用 H5 模式 (npm run dev:h5),登录态保留
- 小程序特性测试使用微信开发者工具
- 配置微信开发者工具关闭自动编译

解决 issues: 每次代码修改后需要重新登录小程序的问题
2026-04-07 21:09:39 +08:00

230 lines
7.1 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.
---
author: Peanut
created_at: 2026-04-07
purpose: 定义小程序开发工作流程,解决每次修改代码后需要重新登录的问题
---
# 小程序开发工作流程设计
## 问题背景
使用 VS Code + 微信开发者工具开发 uni-app 小程序时,每次修改代码后:
1. uni-app 自动重新编译到 `unpackage/dist/dev/mp-weixin`
2. 微信开发者工具检测到文件变化后自动重新加载
3. 小程序重启导致登录态丢失
4. 需要重新登录,严重影响开发效率
## 设计方案
采用 **H5 开发模式为主 + 微信开发者工具验证为辅** 的双轨工作流。
### 架构概览
```
┌─────────────────────────────────────────────────────────────┐
│ 开发工作流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ 代码修改 ┌─────────────────────┐ │
│ │ VS Code │ ────────────> │ 微信开发者工具 │ │
│ │ (编辑代码) │ │ (预览/调试小程序) │ │
│ └─────────────┘ └─────────────────────┘ │
│ │ ▲ │
│ │ npm run dev:h5 │ │
│ ▼ │ │
│ ┌─────────────┐ │ │
│ │ 浏览器 │ <────────────────────┘ │
│ │ (H5 开发模式) │ 大部分功能在此验证 │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 方案详情
#### 1. H5 开发模式(承担 90% 开发工作)
**启动命令**
```bash
cd mini-program
npm run dev:h5
```
**访问地址**`http://localhost:5173`(Vite 自动分配,如有占用自动递增)
**技术原理**
- uni-app 的 H5 平台与小程序平台共享大部分代码
- 平台差异通过条件编译处理(`#ifdef H5` / `#ifdef MP-WEIXIN`
- 登录态存储于浏览器 localStorage,页面刷新后保留
**适用场景**
- UI/样式开发
- 业务逻辑开发
- 组件功能调试
- API 接口联调
**不适用场景**
- 微信小程序特有 API(微信登录、分享、支付等)
- 小程序原生组件测试
- 真机兼容性验证
#### 2. 微信开发者工具配置优化
**配置步骤**
1. 打开微信开发者工具
2. 菜单栏:**设置** → **通用设置**
3. 找到 **编译设置** 区域
4. **取消勾选** "文件修改后自动编译" 或 "保存后自动编译"
**效果**
- VS Code 修改代码后,微信开发者工具不会自动重新编译
- 需要手动点击"编译"按钮(或 Ctrl+B)才会重新加载
- 减少不必要的重启,保持登录态
**替代方案**(如果上述选项不存在):
- 在微信开发者工具中,勾选 "关闭真机调试自动刷新"
- 或使用 "预览" 模式而非 "编辑模式"
#### 3. 推荐工作流
| 开发阶段 | 使用环境 | 操作说明 |
|----------|----------|----------|
| UI/样式开发 | H5 | 快速迭代,即时预览 |
| 业务逻辑开发 | H5 | 大部分逻辑通用,使用浏览器 DevTools 调试 |
| 小程序 API 测试 | 小程序 | 如微信登录、分享等特有功能 |
| 最终验证 | 小程序 | 发布前在真机环境测试 |
**日常开发流程**
```bash
# 1. 启动 H5 开发服务器(终端 1)
cd mini-program
npm run dev:h5
# 2. 打开浏览器访问 http://localhost:5173
# 3. 登录一次后,后续刷新页面登录态保留
# 4. 需要测试小程序特性时:
# - 在另一个终端启动小程序模式
npm run dev:mp-weixin
# - 在微信开发者工具中打开 unpackage/dist/dev/mp-weixin
# - 手动触发编译(避免自动刷新)
```
## 技术细节
### uni-app 平台差异处理
**条件编译语法**
```javascript
// #ifdef H5
// H5 平台特有代码
// #endif
// #ifdef MP-WEIXIN
// 微信小程序平台特有代码
// #endif
// #ifdef H5 || MP-WEIXIN
// 多平台通用代码
// #endif
```
**CSS 条件编译**
```css
/* #ifdef H5 */
.h5-only-style {
/* H5 特有样式 */
}
/* #endif */
```
### 登录态持久化
当前项目已正确实现登录态存储:
```javascript
// 存储 token
uni.setStorageSync('access_token', token)
// 读取 token
const token = uni.getStorageSync('access_token')
// 删除 token(登出)
uni.removeStorageSync('access_token')
```
**注意**uni-app 的 storage API 在不同平台使用不同的底层存储:
- H5localStorage
- 微信小程序:wx.setStorageSync
- 其他小程序:对应平台的 storage API
### 端口管理
H5 开发服务器默认端口为 5173,如被占用会自动递增(5174、5175...)。
**检查端口占用**
```bash
netstat -ano | findstr "5173"
```
**终止占用进程**
```bash
taskkill /F /PID <进程 ID>
```
## 注意事项
### 1. H5 与小程序的差异
| 特性 | H5 | 小程序 |
|------|-----|--------|
| 路由 | vue-router | 小程序页面栈 |
| 存储 | localStorage | wx.storage |
| 网络 | XMLHttpRequest | wx.request |
| 登录 | 自定义登录 | 微信登录 |
| 分享 | 浏览器分享 | 微信分享 API |
### 2. 需要小程序环境验证的功能
- 微信小程序登录
- 微信分享
- 微信支付
- 小程序码生成
- 微信开放标签
- 真机兼容性
### 3. 开发效率优化建议
1. **使用浏览器 DevTools**
- Chrome DevTools 的 Elements 面板检查样式
- Network 面板查看 API 请求
- Console 面板调试 JavaScript
- Application 面板查看 localStorage
2. **H5 热更新**
- 修改样式后自动刷新
- 修改逻辑后热替换(保持应用状态)
3. **小程序模式仅用于验证**
- 不要在小菜模式中进行日常开发
- 只在需要测试小程序特有功能时切换
## 验收标准
采用此工作流程后应达到:
- [x] 日常开发无需频繁重新登录
- [x] H5 模式下可完成 90% 的开发工作
- [x] 小程序模式仅用于最终验证
- [x] 开发效率显著提升
## 参考文档
- [uni-app 条件编译](https://uniapp.dcloud.net.cn/tutorial/platform.html)
- [uni-app H5 开发模式](https://uniapp.dcloud.net.cn/quickstart-h5.html)
- [微信开发者工具设置](https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html)