第5章 5.3 小程序发布流程
🎯 开场 3 分钟:为什么要学这个?
上一章我们学会了小程序分包加载,就像学会了「把大冰箱拆成若干块搬进家门」——内存占用降了,加载也快了。
但问题是:冰箱搬进去了,怎么让它正式住进用户手机里?
你有没有遇到过这种情况:本地开发好好的,微信开发者工具也能跑,但不知道怎么「发布」出去让别人用?或者辛辛苦苦做完,提交审核被拒了,一脸懵?
这一章,我们就来解决这个问题——把你的小程序从「本地玩具」变成「正式产品」的全流程。
学完本文,你能独立完成:账号申请 → 开发配置 → 版本上传 → 提交审核 → 上线发布全套操作。
🧱 基础 25 分钟:核心概念
什么是小程序发布?
打个比方:小程序发布就像开店营业。
| 开店步骤 | 小程序发布 | 说明 |
|---|---|---|
| 办理营业执照 | 注册微信公众平台 | 拿到合法身份 |
| 申请食品许可证 | 申请 AppID | 微信官方认证 |
| 装修店铺 | \n\n \n\n \n\n 开发小程序 |
写代码做功能 |
| 提交卫生检查 | 提交代码审核 | 微信官方审查 |
| 领到许可证 | 发布上线 | 正式营业 |
什么是 AppID?
AppID 就是小程序的「身份证号」。每个小程序都独一无二,相当于你去办营业执照时的统一社会信用代码。
没有 AppID,你的小程序:
- 不能在真机上体验
- 不能提交审核
- 不能发布上线
怎么申请 AppID?
- 打开 微信公众平台
- 注册 → 选择「小程序」
- 填写信息 → 获得 AppID
申请完成后,你会拿到两个东西:
- AppID(小程序 ID)
- AppSecret(小程序密钥,保密!)
# 假设你申请到了这两个值
app_id = "wx1234567890abcdef" # 你的小程序身份证号
app_secret = "abcd1234567890efghijk" # 你的密钥(生产环境要保密)
print(f"我的小程序 ID 是:{app_id}")
什么是版本号?
小程序每次发布都要有个版本号,像软件版本一样,比如 1.0.0、1.2.3。
版本号规范(语义化版本):
- 第 1 位:大版本更新,功能大变
- 第 2 位:新功能上线
- 第 3 位:bug 修复
# 小明的小程序版本管理
versions = [
"1.0.0", # 第1个正式版本
"1.0.1", # 修复了登录bug
"1.1.0", # 新增了分享功能
"2.0.0", # 大改版,全新UI
]
current_version = versions[-1]
print(f"当前线上版本:{current_version}")
什么是体验版?
体验版就像「试营业」,正式开业前先让内部员工或忠实用户测试一下。
特点:
- 不需要审核
- 只有管理员添加的成员能看
- 用来发现正式版的问题
# 小明的发布流程
publish_stages = [
"开发版", # 本地自己玩
"体验版", # 内部测试(试营业)
"审核中", # 提交微信审核
"已发布" # 正式上线(开业)
]
current = "体验版"
print(f"当前状态:{current} - 还没正式发布,只有测试人员能看")
什么是提交审核?
提交审核就像「食品安检」——你开店前得有人检查厨房卫不卫生。
微信官方会检查:
- 功能是否完整
- 是否有违规内容
- 用户体验是否合格
审核时间:通常 1-7 天
# 模拟提交审核流程
def submit_for_review(version, description):
if len(description) < 10:
print("❌ 描述太短,请详细说明更新内容")
return False
print(f"📤 提交版本 {version} 审核中...")
print(f"📝 更新说明:{description}")
print("⏳ 预计 1-7 天完成审核...")
return True
# 提交一个体验版
submit_for_review("1.0.0", "首次发布,包含首页和列表页")
🔥 实战 35 分钟:3 个递进小项目
项目 1(5 分钟):模拟完整的发布流程
跟着抄就能跑,理解核心步骤:
"""
小程序发布流程模拟器
作者:小明
功能:模拟从开发到上线全过程
"""
def print_section(title):
print(f"\n{'='*50}")
print(f" {title}")
print('='*50)
def simulate_publish():
"""模拟完整发布流程"""
# 第1步:准备阶段
print_section("第1步:准备阶段")
app_id = "wx1234567890abcdef"
version = "1.0.0"
print(f"✅ AppID: {app_id}")
print(f"✅ 版本号: {version}")
# 第2步:上传代码
print_section("第2步:上传代码")
print("📤 正在压缩代码...")
print("📤 正在上传到微信服务器...")
print("✅ 代码上传成功!")
# 第3步:提交审核
print_section("第3步:提交审核")
print("📝 填写版本说明:首次发布")
print("⏳ 等待审核中(预计1-7天)...")
print("✅ 审核通过!")
# 第4步:发布上线
print_section("第4步:发布上线")
print("🎉 小程序已上线!")
print(f"🔗 访问地址:https://mp.weixin.qq.com/a/~{app_id}")
simulate_publish()
预期输出:
==================================================
第1步:准备阶段
==================================================
✅ AppID: wx1234567890abcdef
✅ 版本号: 1.0.0
==================================================
第2步:上传代码
==================================================
📤 正在压缩代码...
📤 正在上传到微信服务器...
✅ 代码上传成功!
==================================================
第3步:提交审核
==================================================
📝 填写版本说明:首次发布
⏳ 等待审核中(预计1-7天)...
✅ 审核通过!
==================================================
第4步:发布上线
==================================================
🎉 小程序已上线!
🔗 访问地址:https://mp.weixin.qq.com/a/~wx1234567890abcdef
项目 2(15 分钟):真实场景 - 自动生成版本记录
从 JSON 文件读取版本信息,生成发布报告:
"""
版本发布管理器
作者:小明
功能:管理多版本发布记录,生成发布报告
"""
import json
from datetime import datetime
def load_version_history():
"""从JSON文件加载版本历史(模拟从文件读取)"""
# 实际项目中这些数据会存在数据库或文件中
version_data = [
{
"version": "1.0.0",
"date": "2024-01-15",
"status": "已发布",
"description": "首次发布,包含首页和商品列表",
"review_days": 3
},
{
"version": "1.0.1",
"date": "2024-02-20",
"status": "已发布",
"description": "修复登录闪退bug",
"review_days": 1
},
{
"version": "1.1.0",
"date": "2024-03-10",
"status": "审核中",
"description": "新增购物车功能",
"review_days": None
}
]
return version_data
def generate_publish_report():
"""生成发布报告"""
versions = load_version_history()
print("📊 小程序发布报告")
print(f"生成时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("-" * 50)
# 统计信息
total = len(versions)
released = len([v for v in versions if v["status"] == "已发布"])
pending = len([v for v in versions if v["status"] == "审核中"])
avg_review_days = sum(v["review_days"] for v in versions if v["review_days"]) / released if released else 0
print(f"📈 总版本数:{total}")
print(f"✅ 已发布:{released}")
print(f"⏳ 审核中:{pending}")
print(f"📅 平均审核时长:{avg_review_days:.1f} 天")
print("-" * 50)
# 列出所有版本
print("\n📋 版本详情:")
for v in versions:
status_icon = "✅" if v["status"] == "已发布" else "⏳"
print(f"{status_icon} v{v['version']} | {v['date']} | {v['description']}")
# 生成下一个版本建议
last_version = versions[-1]["version"]
parts = last_version.split(".")
parts[-1] = str(int(parts[-1]) + 1) # 最后一个数字+1
next_version = ".".join(parts)
print(f"\n💡 建议下一个版本号:v{next_version}")
generate_publish_report()
预期输出:
📊 小程序发布报告
生成时间:2024-03-10 15:30:00
--------------------------------------------------
📈 总版本数:3
✅ 已发布:2
⏳ 审核中:1
📅 平均审核时长:2.0 天
--------------------------------------------------
📋 版本详情:
✅ v1.0.0 | 2024-01-15 | 首次发布,包含首页和商品列表
✅ v1.0.1 | 2024-02-20 | 修复登录闪退bug
⏳ v1.1.0 | 2024-03-10 | 新增购物车功能
💡 建议下一个版本号:v1.1.1
项目 3(15 分钟):组合项目 - 做一个「发布检查清单」工具
综合前面的能力,做一个有点真实用的小工具:
"""
小程序发布检查清单
作者:小明
功能:检查小程序是否满足发布条件,生成检查报告
"""
def check_item(name, condition, suggestion):
"""检查单个项目"""
result = "✅ 通过" if condition else "❌ 未通过"
if not condition:
result += f" → {suggestion}"
return {"name": name, "result": result, "passed": condition}
def run_publish_checklist():
"""运行发布前检查"""
print("🔍 小程序发布前检查清单")
print("=" * 50)
# 定义检查项(模拟真实检查逻辑)
checks = [
check_item(
"AppID 已配置",
True,
"请在 project.config.json 中配置 appid"
),
check_item(
"版本号已更新",
True,
"修改 project.config.json 中的 version"
),
check_item(
"小程序已绑定微信开放平台",
False,
"前往 https://open.weixin.qq.com 绑定"
),
check_item(
"隐私协议已配置",
True,
"在 app.json 中配置 privacy"
),
check_item(
"代码无 console.log 调试语句",
False,
"全局搜索 console.log 并删除"
),
check_item(
"所有页面有标题",
True,
"检查每个页面的 json 配置"
),
]
# 显示检查结果
passed = 0
for i, check in enumerate(checks, 1):
status = "✅" if check["passed"] else "❌"
print(f"{i}. {status} {check['name']}")
if not check["passed"]:
print(f" 提示:{check['result'].split('→')[1].strip()}")
# 统计
print("-" * 50)
passed = sum(1 for c in checks if c["passed"])
total = len(checks)
print(f"检查结果:{passed}/{total} 通过")
if passed == total:
print("🎉 所有检查项通过,可以提交审核!")
return True
else:
print("⚠️ 还有问题需要修复,请先处理以上 ❌ 项")
return False
def generate_release_note(version, features, fixes):
"""生成发布说明"""
print("\n📝 发布说明(可复制到微信后台):")
print("-" * 40)
print(f"版本:v{version}")
print("\n新增功能:")
for f in features:
print(f" • {f}")
print("\n问题修复:")
for fix in fixes:
print(f" • {fix}")
# 运行检查
can_release = run_publish_checklist()
# 如果通过,生成发布说明
if can_release:
generate_release_note(
version="1.0.0",
features=[
"首页轮播图展示",
"商品列表瀑布流布局",
"下拉刷新和上拉加载更多"
],
fixes=[
"修复了iOS系统下布局错位的问题",
"修复了某些Android机型白屏的问题"
]
)
预期输出:
🔍 小程序发布前检查清单
==================================================
1. ✅ AppID 已配置
2. ✅ 版本号已更新
3. ❌ 小程序已绑定微信开放平台
示:请前往 https://open.weixin.qq.com 绑定
4. ✅ 隐私协议已配置
5. ❌ 代码无 console.log 调试语句
示:全局搜索 console.log 并删除
6. ✅ 所有页面有标题
--------------------------------------------------
检查结果:4/6 通过
⚠️ 还有问题需要修复,请先处理以上 ❌ 项
💪 进阶 20 分钟:常见坑 + 性能小贴士
坑 1:AppID 填写错误 ❌ → ✅
# ❌ 错误示例:AppID 包含空格或引号
app_id = " wx1234567890abcdef " # 两边有空格
# ✅ 正确示例:AppID 纯净无杂质
app_id = "wx1234567890abcdef" # 干干净净
注意:AppID 填错会直接导致「invalid appid」错误,上传不了代码。
坑 2:版本号格式不对 ❌ → ✅
# ❌ 错误示例:版本号有小数点问题
version = "1.0" # 少一位,不符合语义化版本
# ✅ 正确示例:三段式版本号
version = "1.0.0" # 完美
version = "2.1.15" # 也可以
坑 3:隐私协议没配置就被驳回 ❌ → ✅
# ❌ 错误示例:没配置隐私协议
# 小程序直接被微信拒绝上架
# ✅ 正确示例:在 app.json 中配置
"""
app.json 中添加:
{
"privacy": {
"notice": "为了给您提供更好的服务,我们需要使用您的以下信息..."
}
}
"""
print("✅ 隐私协议已配置")
坑 4:体验版能看,正式版打不开 ❌ → ✅
这种情况通常是缓存问题:
# 解决方案1:清理微信开发者工具的缓存
# 菜单 → 工具 → 清除缓存 → 清除全部
# 解决方案2:检查 app.json 配置
print("""
常见原因:
1. 域名没配置(检查 mp.weixin.qq.com 开发者工具 → 详情 → 域名信息)
2. TLS 版本不对(服务器需要支持 TLS 1.2)
3. HTTPS 证书问题(用正式证书,别用自签名)
""")
坑 5:审核被拒,不知道原因 ❌ → ✅
# 微信审核被拒的TOP3原因及解决方案
rejection_reasons = {
"1. 功能不完整": "确保每个按钮都有实际功能,不要放空链接",
"2. 诱导分享": "不要在页面中出现'分享到朋友圈'等诱导文案",
"3. 虚拟支付": "不要在小程序内直接显示价格购买虚拟商品"
}
for reason, solution in rejection_reasons.items():
print(f"❌ {reason}")
print(f" ✅ 解决方案:{solution}\n")
调试技巧:如何快速定位问题?
# 技巧1:使用 console.log 查看变量
# 在 uniapp 中这样用:
# console.log("当前版本:", version)
# 技巧2:利用网络请求查看接口调用
print("""
调试技巧:
1. 打开微信开发者工具 → 详情 → 域名信息 → 查看合法域名
2. 切换到 Network 面板,查看接口请求和响应
3. 使用 console.log 打印关键变量值
4. 用 try-except 包裹可能出错的代码
""")
# 技巧3:使用条件断点
def debug_version(version):
if version == "debug": # 特殊版本号触发调试
print("🔍 调试模式已开启")
import pdb; pdb.set_trace()
return version
✏️ 练习题 + 作业题
练习题(10 分钟)
练习 1(2 分钟):版本号判断
- 输入:版本号 "1.2.3"
- 预期输出:"合法版本号"
- 提示:用 len() 判断有几个点
练习 2(2 分钟):添加审核状态
- 输入:在项目 1 基础上添加「审核中」「已拒绝」两种状态
- 预期输出:能显示不同状态
- 提示:用一个变量 status 存储状态
练习 3(2 分钟):处理新版本数据
- 输入:[{"version": "1.0.0", "status": "已发布"}, {"version": "1.1.0", "status": "已发布"}]
- 预期输出:打印「所有版本都已发布」
- 提示:用 all() 函数判断
练习 4(3 分钟):版本号比较
- 输入:两个版本号 "1.2.0" 和 "1.10.0"
- 预期输出:"1.10.0 更新"
- 提示:把版本号拆成列表比较
练习 5(1 分钟):找错
- 下面代码有什么问题?
app_id = "wx1234567890abcdef"
print(f'我的AppID是: {app_id}")
- 提示:引号不匹配
作业题(30 分钟 - 2 小时)
作业:做一个「小程序版本发布助手」
-
需求描述:开发一个命令行工具,帮助开发者管理小程序的版本发布流程
-
功能点:
1. 查看当前版本信息
2. 添加新版本记录(版本号、描述、状态)
3. 生成发布检查报告
4. 导出发布说明(markdown 格式) -
加分项:
1. 数据保存到 JSON 文件(重启后不丢失)
2. 支持版本号自动递增 -
验收标准:
- 能正常运行不报错
- 版本记录能正确添加和显示
-
生成的发布说明格式正确
-
提交方式:评论区贴代码或 GitHub 链接
📚 总结 + 资源
本文学到的 3 个核心点:
1. 小程序发布就像「开店营业」,需要营业执照(AppID)、检查(审核)、领证(上线)
2. 发布前一定要做检查清单,避免审核被拒
3. 版本号管理要规范,用语义化版本号(主版本.次版本.修订号)
延伸学习资源:
- 微信小程序官方文档 - 发布流程)
- 《uniapp 跨平台开发实战》(进阶读物)
- B 站搜索「小程序发布流程」视频教程(视觉化学习)
互动钩子:
你在发布小程序时遇到过审核被拒吗?是因为什么原因?评论区聊聊,老粉优先回复!
下一章我们要解决一个让无数新手头疼的问题:自定义基座与真机调试——本地模拟器再好,也不如真机来得真实,但真机调试一堆坑怎么办?下一章教你优雅地「驾驭真机」!

\n\n
\n\n 开发小程序
评论(0)