大家好,一晃好几年都没发文章了,刚好最近用 ai 完整开发了一款小程序,并正式上架了,今天就来给大家分享一下我的全制作过程。
我做的这款小程序,名字叫 「知心星晴」 ,定位是一个偏年轻人体感的暗黑星空风小程序,每天看看星座运势、测测 MBTI 性格和心理题,再打卡记录一下心情晴雨表。
以前自己业余搞项目,最烦的就是“前端抠样式半天、写业务逻辑半天、对齐接口又半天”,往往一个热情上来,第三天就被繁琐的杂活磨平了棱角。
这次我想试试看,如果把编码主力完全交给 Google 最新的 Gemini 3.8 Flash,自己只负责把控需求、架构设计和代码 Review,到底能不能搞出一款能直接上架商用的完整小程序?
今天项目顺利打包传到了微信开发者平台,回过头看,有极其爽快的地方,也有被微信生态的“奇葩潜规则”折腾得不轻的时刻。写篇长文把全过程真实复盘一下,供想尝试 AI 独立开发的朋友们避坑。
01. 先说爽点:Gemini 3.8 Flash 到底有多快?
用下来最直观的感受就是:太快了,而且能吃得下超长上下文。
以往用一些老模型写代码,文件稍微多一点或者上下文一长,它就开始“前言不搭后语”,甚至漏改方法。但 3.8 Flash 在处理微信小程序的跨页面流转时,几乎是瞬间吐出代码,而且能严谨对齐各个文件的变量命名。
1. 复杂数据结构与规则一次生成
星盘和心理测试最头疼的是海量的数据字典:12 个星座在不同时段(今日、明日、本周、本月)的运势评语、四象属性、守护星、匹配逻辑,外加几套心理测评的打分计算规则。 以前手动整理这些 JSON 起码得耗一整天。这次我把产品设计规则给 Gemini,它一次性把整套模块化数据字典生成得严丝合缝,类型定义规范,连宜忌事项和幸运色都兼顾了。
2. 视觉样式的“毛玻璃”调教
我想要的是一种深邃神秘的宇宙紫暗黑毛玻璃风格(Dark Glassmorphism),这种风格如果自己写,调 backdrop-filter、半透明渐变、边框高光和阴影层次非常花时间。 把调色基调给 Gemini 后,它直接抽象了一套全局设计令牌(Design Tokens)写进 app.wxss,从卡片的微呼吸发光、SVG 图标渐变到圆角比例,出来的界面效果一次成型,完全没有粗制滥造的 Demo 感。
3. 分包架构秒做优化
做小程序的人都知道,主包超过 2MB 会被微信拒之门外。Gemini 主动帮我规划了分包架构:
- 主包负责首页、测试广场和个人主页;
- 星盘详情和匹配逻辑拆到
subpackages/zodiac; - 题目测评引擎放进
subpackages/quiz。
最后在终端打包出来,整个小程序代码包仅 339.5 KB(主包 281 KB,分包几十 KB),毫秒级秒开,轻量得可怕。用下来最直观的感受就是:太快了,而且能吃得下超长上下文。
以往用一些老模型写代码,文件稍微多一点或者上下文一长,它就开始“前言不搭后语”,甚至漏改方法。但 3.8 Flash 在处理微信小程序的跨页面流转时,几乎是瞬间吐出代码,而且能严谨对齐各个文件的变量命名。
02. 真人实战:那些差点让人吐血的“微信特色”大坑
如果只看上面,好像开发是一路绿灯——然而真实开发哪有这么理想?真正考验人的,是微信生态里那些文档语焉不详、报错莫名其妙的底层机制。
在做登录授权和个人资料完善面板时,我直接撞上了三个连环坑,差点以为小程序要崩在最后这一步。
坑一:连环红字报错(errno: 112 是个什么鬼?)
我按照常规逻辑做了一个登录弹窗,放了微信官方推荐的 <button open-type="chooseAvatar"> 和 <input type="nickname">。
结果打开开发者工具一测,人傻了:
- 点击“点击设置微信头像”,毫无反应,控制台怒甩一行红字:
[Component] <button>: chooseAvatar:fail api scope is not declared in the privacy agreement - 点一下昵称输入框,更绝,每敲一个按键控制台就刷一条:
[Component] <input>: showNicknameAccessory:fail api scope is not declared in the privacy agreement, errno:112 [object Object]
【排查过程】
去微信社区一搜,全是同行在吐槽这个报错。原来微信从 2023 年底推行了极其严格的隐私合规: 微信底层认为头像和昵称是受控的隐私 API。你光在前端写代码没用,必须在微信公众平台(mp.weixin.qq.com)后台的「用户隐私保护指引」里,手动勾选声明“收集你的微信头像”和“收集你的微信昵称”! 如果后台没审核通过这一项,微信底层的渲染层组件会直接无情拦截,连头像选择器都不给你弹出来。
【最终解决办法】
这里我和 Gemini 配合摸出了双重解法:
- 本地调试解除拦截:在
app.json里,把之前配置的"__usePrivacyCheck__": true改成false。这样微信开发者工具的本地模拟器就不会强制拦截这两项接口,原生键盘一键填入和头像窗口立刻就能正常弹出; - 后台补齐声明:登录公众平台后台,进入「设置」->「基本设置」->「服务内容声明」->「用户隐私保护指引」,勾选添加头像和昵称的使用说明提交审核。两者齐活,本地和真机才彻底通畅。
坑二:消失的昵称——被异步吞掉的输入值
解决了权限拦截后,遇到了一个更恶心的交互 Bug: 用户点进输入框,微信键盘上方会弹出用户微信昵称的气泡,点一下气泡,昵称填进去了,接着用户下意识马上点底部的“授权登录”按钮。
结果提交到后台,用户名居然还是默认的“微信用户”!
【排查过程】
这个 Bug 非常隐蔽。因为用户从点击键盘气泡到点击登录按钮,手速通常在几百毫秒之内。 微信键盘填入昵称触发的是 bindblur 或 bindchange,我们在回调里调用 this.setData({ loginNickName: val })。 然而,小程序的 setData 从逻辑层同步到渲染层是异步的!当用户以极快手速点击“登录”按钮触发 confirmLogin() 时,它读取的 this.data.loginNickName 根本还没来得及更新,读出来的依然是旧的空值!
【最终解决办法】
不能完全迷信 setData 的同步性。我们在 JS 实例中加了一层内存实时同步变量:
// 监听微信键盘一键填入与手动输入
onLoginNickChange(e) {
const val = (e && e.detail && e.detail.value) || '';
if (val) {
this.tempLoginNick = val; // 1. 零延迟直接写进内存变量,不走渲染层队列!
this.setData({ loginNickName: val });
}
},
// 登录提交时
confirmLogin() {
// 2. 优先从同步内存变量中拿值,读不到才兜底取 data
const rawNick = this.tempLoginNick || this.data.loginNickName || "";
const nickName = rawNick.trim() || "微信用户";
// 稳稳拿到用户真实昵称,再也不怕手速快了
}// 监听微信键盘一键填入与手动输入
onLoginNickChange(e) {
const val = (e && e.detail && e.detail.value) || '';
if (val) {
this.tempLoginNick = val; // 1. 零延迟直接写进内存变量,不走渲染层队列!
this.setData({ loginNickName: val });
}
},
// 登录提交时
confirmLogin() {
// 2. 优先从同步内存变量中拿值,读不到才兜底取 data
const rawNick = this.tempLoginNick || this.data.loginNickName || "";
const nickName = rawNick.trim() || "微信用户";
// 稳稳拿到用户真实昵称,再也不怕手速快了
}
加上 this.tempLoginNick 之后,哪怕手速再快连击,昵称也 100% 稳稳被捕获。
03. 最后一步:连点鼠标都省了的 CLI 自动化部署
所有代码和 Bug 改完后,按照平时的习惯,得切到微信开发者工具的界面,点右上角“上传”、敲版本号、写备注。
但我这次全程都在终端里操作。微信开发者工具自带了一个非常强悍的 CLI 命令行工具,只要在开发者工具的「安全设置」里把 服务端口 打开(我这边自动分配的是 31632 端口),就可以直接在命令行推代码:## 03. 最后一步:连点鼠标都省了的 CLI 自动化部署
所有代码和 Bug 改完后,按照平时的习惯,得切到微信开发者工具的界面,点右上角“上传”、敲版本号、写备注。
04. 真实的结语与复盘
这几天用 Gemini 3.8 Flash 下来,有两点体会特别深刻:
- AI 编程的价值不仅是“帮你敲代码”,而是“帮你做架构降噪” : 在做「知心星晴」时,如果每行代码都手写,我可能会把大量精力耗费在 CSS 对齐、JSON 拼装这种低价值繁琐工作上,遇到微信权限报错可能烦躁得直接放弃。但有了 AI,它能快速帮你理清逻辑、梳理边界,你只要守住核心业务规则和系统安全底线。
- 不能完全当甩手掌柜,开发者的经验依然不可替代: AI 并不是万能的。它一开始也不知道你的微信公众平台后台到底勾没勾选隐私指引,也不知道用户极快的手速会导致
setData发生时序竞态。AI 给出建议,开发者发现猫腻,互相迭代调试,这才是当前 AI 辅助开发最舒服的姿态。
目前 「知心星晴」 的 v1.0.1 体验版已经顺利推上微信平台。如果大家平时也喜欢看星座指引、测测性格题,或者对微信小程序开发感兴趣,欢迎一起交流探讨!