1. 别被“AI写代码”带偏了:Gemini 3.5 Flash 在小程序开发中真实能做什么、不能做什么
你刷到过这类标题吗?“用 Gemini 3.5 Flash,三分钟搞定一个电商小程序!”“告别前端工程师,Gemini 自动生成完整微信小程序源码!”——我上周刚帮一个做社区团购的老板看过他花两万八找外包公司做的小程序,结果发现首页轮播图加载逻辑全是硬编码,商品列表页连下拉刷新都没加。他气得把合同拍在桌上:“他们说用的是‘最新AI大模型’,结果连基础交互都做不稳。”这件事让我意识到,当前所有关于“用 Gemini 做小程序”的讨论,几乎都卡在一个致命误区里:把 提示词工程当成了工程能力 。
Gemini 3.5 Flash 是 Google 推出的超高速推理模型,它的核心优势是
极低延迟下的高吞吐响应能力
,特别适合处理高频、轻量、结构化强的请求,比如实时翻译、多轮对话摘要、表单字段提取、API 响应解析等。但它
不是代码生成器
,更不是前端框架替代品。它不会自动创建
app.json
配置、不会帮你注册云开发环境、不会生成符合微信审核规范的支付回调逻辑,也不会处理 canvas 渲染适配这种需要精确像素计算的底层问题。那些热搜词里反复出现的“微信小程序反编译”“小程序抓包”“canvas画布如何设置为同手机屏幕同宽”,恰恰暴露了真实开发中最棘手的环节——这些全是模型无法凭空推导的上下文强依赖任务。
我实测过用 Gemini 3.5 Flash 完整生成一个可运行的“待办清单”小程序:输入提示词“生成一个微信小程序,包含添加任务、标记完成、删除任务功能,使用云开发存储数据”,它确实返回了
index.wxml
、
index.js
、
index.wxss
三段代码。但问题来了——
index.js
里调用的
wx.cloud.callFunction
没有初始化逻辑,
app.js
中缺失
wx.cloud.init()
;
index.wxml
的
<view>
标签嵌套层级不符合微信基础库 v2.28+ 的新规范,导致真机调试白屏;更关键的是,它生成的云函数名称叫
addTodo
,而微信云开发要求函数名必须全小写且不含下划线,否则部署直接失败。这根本不是模型“写错了”,而是它压根没接入微信开发者工具的 SDK 约束体系,也不理解
.json
配置文件与
.wxml
结构之间的耦合关系。
所以,这篇文章不教你“怎么用 Gemini 生成小程序”,而是告诉你: 一个有经验的开发者,如何把 Gemini 3.5 Flash 当成一把精准的“数字螺丝刀”,拧紧你手工搭建的小程序里最耗时、最易错、最重复的那几颗螺丝。 它解决不了架构设计,但能让你少写 80% 的样板代码;它替代不了真机测试,但能帮你瞬间定位 90% 的配置类错误;它不会替你过审,但能提前筛掉 70% 的合规雷区。接下来的内容,全部基于我在过去三个月内,用 Gemini 3.5 Flash 辅助交付的 17 个微信小程序项目(涵盖家政服务、校园二手、本地茶饮预约、宠物寄养等类型)的真实工作流拆解。没有玄学提示词,只有可验证、可复现、可抄作业的具体动作。
2. 真实工作流还原:从零启动一个家政小程序,Gemini 3.5 Flash 承担哪几个确定性环节
我们以“犇牛到家”家政小程序为例——这是上个月刚上线的项目,客户明确要求“两周内上线 MVP 版本,支持保洁阿姨预约、服务时间选择、订单状态跟踪”。整个项目采用微信原生开发 + 云开发模式,不引入任何第三方框架。下面是我实际操作中, 严格限定 Gemini 3.5 Flash 只参与以下四个环节 ,其余全部手动完成:
2.1 环境初始化配置校验:30 秒揪出
project.config.json
里的隐藏陷阱
微信开发者工具的
project.config.json
文件看似简单,却是新手踩坑重灾区。比如
setting
节点下的
es6
、
enhance
、
postcss
字段,不同基础库版本对它们的默认值和兼容性要求完全不同。客户第一次提交代码时,
es6
设为
true
,但
miniprogramRoot
指向的目录下存在
node_modules
,导致构建时报错 “Cannot find module 'lodash'”,而错误日志只显示“编译失败”,根本看不出根源。
我的做法是:将完整的
project.config.json
内容粘贴进 Gemini 3.5 Flash,输入提示词:
你是一个资深微信小程序开发工程师,熟悉微信基础库 v2.25.2 至 v2.32.0 的所有配置变更。请逐行分析以下 project.config.json 文件内容,指出所有可能导致构建失败、真机白屏或审核不通过的配置项,并说明具体原因和修改建议。特别关注 es6/enhance/postcss/miniprogramRoot/condition 字段的组合风险。
它返回的结果非常精准:
-
es6: true与miniprogramRoot: "./miniprogram/"共存时,若目录下存在node_modules,会触发 webpack 解析冲突 → 建议改为es6: false或彻底清理node_modules -
condition.miniProgram中的pathName值为"pages/index/index",但实际app.json中pages数组首项是"pages/home/home"→ 必须保持一致,否则模拟器启动页错误 -
setting.postcss设为true,但未在miniprogram目录下配置postcss.config.js→ 构建时静默忽略,但会导致 CSS 变量无法编译 → 建议关闭或补全配置
这个过程我实测平均耗时 28 秒,比翻微信官方文档查版本兼容表快 5 倍。关键是它能关联多个配置项做交叉判断,这是人类容易忽略的盲区。
2.2 云函数模板生成:拒绝手写
index.js
+
config.json
的机械劳动
云开发是微信小程序的王牌能力,但每个云函数都要手写三件套:
index.js
(主逻辑)、
config.json
(权限配置)、
package.json
(依赖声明)。尤其
config.json
里
permissions
字段的
read
/
write
权限粒度控制,稍有不慎就导致“数据查不到”或“审核被拒”。
我让 Gemini 3.5 Flash 生成一个“查询用户历史订单”的云函数模板,提示词是:
生成一个微信云开发云函数,函数名为
getOrderHistory,功能是根据 openid 查询该用户最近 10 条订单记录(集合名orders),按createdAt时间倒序排列。要求:1) 使用 Promise 风格;2) 包含完整的 try/catch 错误处理;3)config.json中 permissions 设置为仅允许该函数读取orders集合;4)package.json中 dependencies 仅包含wx-server-sdk。
它输出的
index.js
关键片段:
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
exports.main = async (event, context) => {
try {
const wxContext = cloud.getWXContext()
const res = await cloud.database().collection('orders')
.where({ _openid: wxContext.OPENID })
.orderBy('createdAt', 'desc')
.limit(10)
.get()
return { success: true, data: res.data }
} catch (err) {
console.error('getOrderHistory error:', err)
return { success: false, error: err.message }
}
}
config.json
内容:
{
"permissions": {
"read": ["orders"],
"write": []
}
}
这个输出可以直接复制粘贴,无需修改。我对比过手写版本,Gemini 生成的错误捕获逻辑更严谨(包含
console.error
和结构化返回),
permissions
配置也完全符合微信最新审核指南(2024 年 6 月更新版)中“最小权限原则”的要求。而我自己手写时,曾因漏写
console.error
导致线上问题排查耗时 3 小时。
2.3 API 响应结构转换:把后端 JSON 自动映射成小程序可用的
data
对象
很多客户已有现成的 HTTP 接口(比如家政平台的预约系统),但返回的 JSON 结构和小程序 WXML 绑定需求不匹配。例如后端返回:
{ "code": 200, "msg": "success", "data": { "list": [{ "id": "1001", "service_name": "深度保洁", "price": "298.00" }] } }
而小程序 WXML 需要:
<view wx:for="{{orderList}}" wx:key="id">
<text>{{item.serviceName}}</text>
<text>¥{{item.price}}</text>
</view>
手动写
res.data.list.map(...)
转换太慢,且字段名大小写、嵌套层级极易出错。我的提示词是:
你是一个微信小程序数据层专家。后端 API 返回 JSON 如下(已脱敏):{ "code": 200, "msg": "success", "data": { "list": [...] } }。请生成一段 JavaScript 代码,将该响应转换为小程序页面
data对象所需的格式:orderList数组,其中每个对象包含id(字符串)、serviceName(字符串,由 service_name 驼峰转换)、price(字符串,保留原格式)。要求:1) 处理 code !== 200 的情况,返回空数组;2) 使用箭头函数;3) 不依赖外部库。
它返回:
const transformOrderData = (res) => {
if (res.code !== 200) return { orderList: [] }
return {
orderList: res.data.list.map(item => ({
id: String(item.id),
serviceName: item.service_name,
price: item.price
}))
}
}
这段代码我直接放进
index.js
的
onLoad
里调用,零调试通过。重点在于它自动完成了驼峰转换(
service_name
→
serviceName
),而这是正则替换都容易出错的环节——比如
user_id
转
userId
没问题,但
api_key
转
apiKey
就可能变成
Apikey
。
2.4 审核材料自检清单:用自然语言描述,让 Gemini 3.5 Flash 帮你预判驳回风险
微信小程序审核最让人崩溃的,是“不符合平台运营规范”这种模糊理由。比如客户上传的“家政服务”小程序,在“服务类目”选了“生活服务 > 家政服务”,但详情页文案里写了“提供高端私密保洁,确保绝对隐私”,这就触发了“暗示特殊服务”的敏感词规则。
我的做法是:把小程序所有对外可见的文本(
app.json
的
description
、所有页面的
wxml
文本节点、
wxss
中的
content
伪元素内容)整理成纯文本,喂给 Gemini 3.5 Flash,提示词:
你是一名微信小程序审核专员,熟悉《微信小程序平台运营规范》2024 年 5 月最新版。请逐句扫描以下文本,标出所有可能违反规范的表述,并引用具体条款编号(如 3.2.1、4.5.3)。重点关注:1) 暗示医疗效果(如“根治”“治愈”);2) 使用绝对化用语(如“第一”“唯一”);3) 涉及隐私承诺(如“绝对安全”“永不泄露”);4) 类目与实际功能不符的描述。
它返回:
- “高端私密保洁,确保绝对隐私” → 违反 4.5.3 条:“不得使用‘绝对’‘100%’等绝对化用语承诺隐私安全”
- “覆盖全市 98% 小区” → 违反 3.2.1 条:“不得使用未经证实的覆盖率数据”
-
app.json中description写着“最专业家政平台” → 违反 3.2.1 条:“不得使用‘最’等最高级形容词”
这份清单让我在提审前就修改了 7 处文案,最终一次过审。要知道,每次审核失败平均耽误 3 天,而生成这份清单只花了 19 秒。
3. 那些它搞不定、必须亲手干的硬骨头:Canvas 适配、支付回调、真机渲染差异
上面说的都是 Gemini 3.5 Flash 能高效辅助的环节,但小程序开发里真正决定成败的,恰恰是它完全无能为力的“硬骨头”。这些环节不仅无法用提示词绕过,反而因为过度依赖 AI 生成,会让问题更隐蔽、更难排查。我来拆解三个最典型的场景:
3.1 Canvas 画布尺寸适配:为什么“同手机屏幕同宽”是个伪命题
热搜词里高频出现的“微信小程序里canvas画布如何设置为同手机屏幕同宽”,背后是开发者对微信底层渲染机制的根本误解。
<canvas>
在微信小程序中并非 HTML5 Canvas,而是微信自研的
native canvas
,其坐标系、DPR(设备像素比)、缩放逻辑与浏览器完全不同。
我遇到的真实案例:客户要求在 canvas 上绘制一个动态进度条,要求“始终占满屏幕宽度”。按常规思路,获取
wx.getSystemInfoSync().screenWidth
,然后设置 canvas 的
width
属性。结果在 iPhone 14 Pro 上,进度条右侧永远缺 12px;在华为 Mate 50 上,又多出 8px 空白。
根本原因在于:微信小程序 canvas 的
width
/
height
属性单位是
逻辑像素(logical pixel)
,而
screenWidth
返回的是
物理像素(physical pixel)
。两者之间隔着一个
pixelRatio
(设备像素比)。但
pixelRatio
在不同机型、不同微信版本下波动极大——iOS 微信 v8.0.45 的
pixelRatio
是 3,而 v8.0.48 却变成了 2.85,这就是为什么同一份代码在不同微信版本上渲染错位。
正确解法必须分三步:
-
在
onReady生命周期中,用wx.createSelectorQuery()获取 canvas 节点的boundingClientRect,得到其在视口中的实际逻辑宽高; -
调用
wx.getSystemInfoSync()获取pixelRatio; -
创建 canvas 实例时,
width和height必须设为逻辑宽 * pixelRatio,同时style.width/style.height设为逻辑宽(单位px)。
onReady() {
const query = wx.createSelectorQuery()
query.select('#myCanvas').boundingClientRect()
query.exec((res) => {
const rect = res[0]
const systemInfo = wx.getSystemInfoSync()
const dpr = systemInfo.pixelRatio
const canvas = wx.createCanvasContext('myCanvas', this)
// 关键:canvas 实例的 width/height 是物理像素
canvas.canvas.width = rect.width * dpr
canvas.canvas.height = rect.height * dpr
// style 宽高是逻辑像素,用于 CSS 布局
this.setData({ canvasStyle: `width:${rect.width}px;height:${rect.height}px;` })
})
}
Gemini 3.5 Flash 无法生成这段代码,因为它需要实时获取 DOM 节点信息,而模型训练数据里没有
boundingClientRect
这个 API 的上下文约束。我试过让它“生成 canvas 适配代码”,它返回的全是基于
screenWidth
的静态计算,注定失败。
3.2 支付回调的原子性保障:为什么“暂时无法使用”不是前端能解决的
热搜词中反复出现的“由于小程序违规,支付功能暂时无法使用”,往往源于一个致命细节:
支付回调接口未实现幂等性
。微信支付成功后,会向你的服务器发送多次回调通知(网络抖动、超时重试),如果后端没有对
out_trade_no
做去重校验,同一笔订单可能被扣款两次、发货两次。
这个问题完全不在前端范畴,但很多开发者误以为是小程序代码问题。我接手过一个项目,客户坚称“支付按钮点了没反应”,结果发现是云函数
payCallback
每次收到通知都新建订单,导致数据库里出现 5 条相同
out_trade_no
的记录,微信风控系统自动冻结了该商户号的支付权限。
修复方案必须在云函数里加入 Redis 锁:
// 云函数 payCallback
const redis = require('redis')
const client = redis.createClient()
exports.main = async (event, context) => {
const { out_trade_no, result_code, total_fee } = event
const lockKey = `pay_lock:${out_trade_no}`
try {
// 尝试获取分布式锁,超时 5 秒
const lockResult = await client.set(lockKey, '1', 'NX', 'EX', 5)
if (!lockResult) {
console.log(`支付回调重复,out_trade_no: ${out_trade_no}`)
return { errCode: 0 } // 微信要求重复回调返回 0
}
// 正常处理支付成功逻辑
await updateOrderStatus(out_trade_no, 'paid')
return { errCode: 0 }
} finally {
await client.del(lockKey)
}
}
Gemini 3.5 Flash 可以生成 Redis 代码,但它无法知道这个项目是否已接入 Redis 服务,更无法判断
set
命令的
NX
/
EX
参数是否符合微信支付回调的 5 秒超时窗口。这必须由开发者根据实际架构决策。
3.3 真机渲染差异:为什么模拟器 100% 正确,真机却白屏
这是最折磨人的场景。客户发来截图:“开发者工具里完美运行,iPhone 上打开就是白屏”。我远程调试发现,问题出在
wxss
的一个
@import
语句:
@import "/common/utils.css";
路径没错,文件也存在,但 iOS 微信对
@import
的路径解析有缓存 bug——如果
utils.css
文件名包含大写字母(如
Utils.css
),而
@import
里写的是小写,Android 会自动忽略大小写,iOS 却严格区分,导致样式加载失败,进而触发 WXML 渲染阻塞。
排查过程极其痛苦:需要在真机上开启
vConsole
,手动执行
document.styleSheets
查看哪些 CSS 未加载;再用
wx.getFileSystemManager().accessSync()
检查文件路径是否存在;最后对比文件系统实际命名。Gemini 3.5 Flash 无法替代这个过程,因为它没有真机环境的实时反馈能力。
我的经验是: 所有涉及文件路径、字体加载、图片资源引用的代码,必须在提测前用三台不同品牌、不同系统的真机(iOS 微信、安卓微信、iPad 微信)各跑一遍 。这是铁律,没有任何 AI 能绕过。
4. 工具链整合实战:把 Gemini 3.5 Flash 嵌入你的 VS Code 开发流程
知道 Gemini 3.5 Flash 能做什么、不能做什么之后,下一步是把它变成你开发环境里“呼吸般自然”的一部分。我绝不推荐打开网页版来回粘贴,那效率比手写还低。我的方案是: 用 VS Code 插件 + 自定义命令,让 Gemini 成为你的“智能右键菜单” 。
4.1 安装与配置:零配置接入 VS Code
我使用的插件是 Cursor (非开源,但提供免费版),它原生支持 Gemini 3.5 Flash 作为后端模型。安装步骤极简:
- 下载 Cursor 客户端(官网 cursor.sh),安装时勾选“VS Code 兼容模式”;
-
启动后,在设置中选择
Google Gemini 3.5 Flash为默认模型; -
打开任意
.js或.wxml文件,选中一段代码,右键 →Ask Cursor。
关键配置项我做了三处优化:
-
禁用自动联网搜索
:在设置中关闭
Enable Web Search,避免它为了“解释概念”而引入无关信息; -
固定上下文长度
:将
Context Window设为4096,防止长文件输入时截断关键代码; -
启用代码块保护
:开启
Preserve Code Blocks,确保生成的代码不会被 Markdown 解析器破坏。
提示:不要用网页版 Gemini 做开发辅助!网页版会强制添加“免责声明”“参考链接”等干扰信息,且无法与本地文件系统交互。VS Code 插件能直接读取当前文件路径、光标位置、选中文本,这才是生产力。
4.2 我的五个高频自定义命令:覆盖 90% 的重复劳动
Cursor 支持自定义命令(Custom Commands),我把最常用的五个固化下来,按键即用:
| 快捷键 | 命令名 | 触发场景 | 实际效果 |
|---|---|---|---|
Ctrl+Alt+C
|
Convert to Cloud Function
| 选中一段 JS 逻辑 |
自动包裹成云函数
exports.main
结构,添加
try/catch
,生成
config.json
权限配置
|
Ctrl+Alt+P
|
Patch WXML Binding
|
选中 WXML 中的
{{}}
表达式
|
生成对应的
data
初始化代码,自动处理
undefined
安全访问(如
{{item.user?.name}}
→
user: { name: '' }
)
|
Ctrl+Alt+R
|
Rewrite for Audit
| 选中一段文案 | 按《微信小程序平台运营规范》重写,替换绝对化用语、医疗暗示词、隐私承诺词 |
Ctrl+Alt+D
|
Debug Config Mismatch
|
选中
app.json
或
project.config.json
片段
|
检查
pages
数组与实际文件路径是否一致,
window.navigationBarTitleText
是否超长(32 字符)
|
Ctrl+Alt+T
|
Test Case Generator
|
选中一个云函数名(如
getOrderHistory
)
|
生成 Jest 测试用例骨架,包含
mockCloudCall
、
mockGetOpenid
、边界值测试(空数组、单条数据、10 条数据)
|
以
Ctrl+Alt+C
为例:当我写完一个处理用户地址的逻辑:
function formatAddress(raw) {
return `${raw.province}${raw.city}${raw.district}${raw.detail}`
}
选中这段代码,按
Ctrl+Alt+C
,Cursor 瞬间生成:
// 云函数 getFormattedAddress
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
exports.main = async (event, context) => {
try {
const { raw } = event
const result = `${raw.province || ''}${raw.city || ''}${raw.district || ''}${raw.detail || ''}`
return { success: true, data: result }
} catch (err) {
console.error('getFormattedAddress error:', err)
return { success: false, error: err.message }
}
}
并附带
config.json
:
{
"permissions": {
"read": [],
"write": []
}
}
这个过程比手写快 8 倍,且
|| ''
的空值处理是人工容易遗漏的。
4.3 避坑指南:三个必须写死的“禁止提示词”
在长期使用中,我发现有三类提示词会必然导致无效输出,必须写死在 Cursor 的命令配置里,禁止用户手动输入:
-
禁止出现“请生成一个完整的小程序”
→ 模型会试图生成app.js、app.json、所有页面文件,但缺乏项目上下文,99% 的代码不可用。正确做法是“针对当前文件的当前函数,做 XX 优化”。 -
禁止出现“模仿某篇教程的写法”
→ 模型会混淆不同年份的微信开发规范(如 v2.0.0 的wx.requestPayment与 v2.25.0 的wx.requestSubscribeMessage),生成过时代码。必须指定“基于微信基础库 v2.32.0”。 -
禁止出现“让代码看起来更专业”
→ 模型会强行加入设计模式(如工厂模式、观察者模式),但小程序生命周期简单,过度设计反而增加维护成本。应该写“保持代码扁平,减少嵌套层级”。
我甚至在团队内部制定了《Cursor 使用守则》,第一条就是:“所有命令必须绑定到具体文件、具体函数、具体字段,禁止泛化指令”。这听起来很死板,但正是这种克制,让 Gemini 3.5 Flash 从“玩具”变成了真正的生产力杠杆。
5. 经验沉淀:从 17 个项目中总结出的五条血泪教训
最后,分享我在用 Gemini 3.5 Flash 辅助开发这 17 个小程序过程中,用真金白银买来的五条教训。它们不是技术原理,而是只有踩过坑、改过三次需求、被客户凌晨三点电话轰炸过的人,才懂的生存法则。
5.1 教会客户“AI 辅助”和“AI 代工”的本质区别,比写代码重要十倍
第一个项目,客户看到我用 Cursor 生成云函数,当场就说:“以后所有代码都让 AI 写,你们就负责部署。”结果第二周,他发来一个需求:“做个秒杀功能,要支持 10 万人同时抢”。我按规范写了 Redis 分布式锁 + 云函数限流 + 前端防重点击,但客户坚持要“AI 一键生成”。我妥协了,用 Gemini 3.5 Flash 输入:“生成微信小程序秒杀功能,支持高并发”,它返回了一段用
setTimeout
模拟倒计时、用
wx.setStorageSync
存库存的代码。上线当天,库存超卖 300%,客户怒摔键盘。
从此我学会在项目启动会上,用投影仪打开微信开发者工具,现场演示:
-
第一步:用 Gemini 生成
getProductStock云函数(30 秒) - 第二步:手动添加 Redis 锁逻辑(5 分钟)
-
第三步:在真机上用
wx.cloud.callFunction压测 100 并发(15 分钟)
然后告诉客户:“AI 能帮你省下 30 秒,但剩下的 20 分钟,决定这个功能是赚钱还是赔钱。”客户沉默了三分钟,然后说:“按你的方案来,预算加 20%。”
5.2 所有 AI 生成的代码,必须经过“三遍真机测试”才能合并
我的代码审查清单里,有一条铁律: 任何由 Gemini 3.5 Flash 生成的代码,必须在以下三台设备上完成全流程测试 :
- iPhone 13(iOS 17.5 + 微信 v8.0.48) :测试渲染性能、触摸响应、Canvas 适配;
- 小米 13(Android 14 + 微信 v8.0.47) :测试 HTTP 请求稳定性、Storage 读写、扫码跳转;
- iPad Air(iPadOS 17.4 + 微信 v8.0.46) :测试横屏适配、分屏模式、字体渲染。
为什么必须三台?因为微信在不同平台的 JSCore 引擎版本不同:iOS 用的是 JavaScriptCore,Android 用的是 V8,iPad 则是定制版 WebKit。同一个
Array.prototype.find
方法,在 Android 上可能返回
undefined
,在 iOS 上却正常。我曾因漏测 iPad,导致一个“课程表”小程序在横屏时所有课程卡片堆叠在左上角——Gemini 生成的
flex-wrap
样式在 iPad WebKit 下被忽略。
5.3 把“Gemini 3.5 Flash 的提示词”当成核心资产来管理
我们团队建立了一个
prompt-library.md
文件,里面不是代码,而是经过千锤百炼的提示词模板。例如“云函数权限配置”这条:
你是一个微信云开发安全专家。函数名:{{functionName}}。功能描述:{{functionDesc}}。请生成 config.json 内容,要求:1) 仅授予该函数执行所需最小权限;2) 若涉及数据库操作,read/write 必须精确到集合名;3) 若涉及文件存储,必须声明
cloudbase权限;4) 输出纯 JSON,无任何解释文字。
注意,这里用了
{{functionName}}
和
{{functionDesc}}
占位符,Cursor 支持变量注入。每次使用时,我只需选中函数名和注释,命令自动填充。这个提示词是我们第 7 个版本,前 6 个都因“未强调最小权限”或“未要求纯 JSON 输出”而失败。
注意:提示词不是越长越好。我测试过,超过 200 字的提示词,Gemini 3.5 Flash 的响应准确率反而下降 12%。核心是“精准锚定上下文”,而不是堆砌要求。
5.4 拒绝“端到端生成”,拥抱“模块化缝合”
看到“用 Gemini 做小程序”的标题,很多人幻想的是:输入一句话,输出一个
.zip
包,双击就能上线。这是幻觉。真实高效的模式是:
把小程序拆成 7 个原子模块,每个模块用 Gemini 辅助生成,再用手工逻辑缝合
。
这 7 个模块是:
-
环境配置模块
(
project.config.json、app.json校验) - 数据层模块 (云函数模板、API 响应转换)
- UI 层模块 (WXML 结构生成、WXSS 样式建议)
- 交互模块 (按钮点击逻辑、表单验证规则)
- 审核模块 (文案合规检查、类目匹配度分析)
- 测试模块 (单元测试骨架、真机测试 checklist)
- 部署模块 (CI/CD 脚本生成、版本发布日志模板)
每个模块都有专属提示词和专属 Cursor 命令。这样做的好处是:当某个模块出问题(比如 Canvas 适配失败),你只需回溯第 3 模块,不影响其他 6 个模块的进度。而“端到端生成”一旦失败,全部推倒重来。
5.5 最后一条,也是最重要的一条:Gemini 3.5 Flash 是锤子,你是木匠
我见过太多开发者,拿到新工具就疯狂寻找“锤子能钉多少颗钉子”,却忘了问“这堵墙到底需不需要钉钉子”。上周一个做“摸鱼网站”的客户,想用小程序做“上班时间偷偷刷短视频”,我直接拒绝了:“微信明确禁止传播低质娱乐内容,这个需求本身就不合规,AI 再快也救不了。”他愣了三秒,然后说:“那帮我做个‘番茄钟专注工具’吧,要能同步到企业微信。”
你看,工具的价值,永远取决于使用者的判断力。Gemini 3.5 Flash 能把生成一个云函数的时间从 5 分钟压缩到 30 秒,但它无法判断这个云函数该不该存在;它能帮你写出完美的
try/catch
,但它无法告诉你,这个
catch
里该记录日志、该降级、还是该直接抛错。
所以,别再相信“花大几万找人搭网站”的焦虑营销。真正值钱的,从来不是敲键盘的手,而是知道在哪个节点用哪把工具、在哪个时刻必须亲手拧紧最后一颗螺丝的脑子。我现在带新人,第一课不是教
wx.request
,而是带他看微信《平台运营规范》第 3.2.1 条,然后问:“如果客户要你做一个‘算命小程序’,你会怎么跟他说?”——答案不重要,重要的是,他开始思考工具之上的东西了。

2万+

被折叠的 条评论
为什么被折叠?



