去年冬天,一个在石家庄做连锁烘焙的客户找到我们。他们已经有自己的小程序商城,但想把「在线预订蛋糕」这块能力复用到三个不同门店的独立小程序里。第一反应是复制代码,结果维护成本直接爆炸——改一个配送逻辑要同步改三遍。后来我们把它拆成插件,一次开发、多处引用,问题才算解决。这件事让我想认真聊聊小程序插件开发,尤其是本地团队容易踩的坑。

插件不是组件,别把两者搞混
很多刚接触的开发者会把插件和自定义组件混为一谈。简单说:
- 自定义组件是页面里的一块 UI,运行在宿主小程序的上下文里,能直接读宿主的 data。
- 插件是独立发布的代码包,有自己的 app.json、自己的页面和逻辑,宿主只能通过约定好的接口调用它,拿不到插件内部状态。
这个隔离性既是限制也是保护。插件不能随意访问宿主页面栈,也不能直接调用宿主的私有方法,所有交互必须走 plugin.json 里声明的导出接口。我们在给石家庄一家做社区团购的客户做「团长分佣计算器」插件时,就因为这个隔离性多花了半天——原本想在插件里直接跳宿主页面,最后改成通过回调让宿主自己处理跳转。
开发前的三个硬性准备
1. 先申请插件开发权限
插件必须挂在某个已认证的小程序账号下开发,个人号不行。如果你的主体是公司,去公众平台「设置—第三方设置—插件管理」里申请,审核一般一到三个工作日。石家庄本地不少客户是餐饮、零售类主体,认证材料齐全的话流程很顺。
2. 目录结构要提前规划
插件项目的根目录必须有 plugin.json,声明 publicComponents、pages、main 入口。一个典型的骨架长这样:
{
"publicComponents": {
"cake-order": "components/cake-order/index"
},
"pages": {
"order-detail": "pages/order-detail/index"
},
"main": "index.js"
}
注意 publicComponents 里暴露的组件,宿主才能用。没暴露的,宿主连标签都写不出来。
3. 宿主端要声明引用
宿主小程序在 app.json 里加 plugins 字段,填插件 appid 和版本号。开发阶段用 dev 版本,上线前记得切到正式版本,这个切换我们踩过一次——测试环境好好的,提审时才发现引用的还是开发版。
实战中最容易翻车的两个点
样式隔离与 rpx 换算
插件里的样式默认和宿主隔离,这是好事,但 rpx 的基准宽度是按插件自己的设计稿算的。如果插件内部写死了 750rpx 的布局,放到不同尺寸设备上表现会不一致。我们的做法是插件内部统一用 rpx,但在文档里明确告诉宿主:插件容器宽度自适应,别在外面套固定宽度的 view。给保定一个做本地生活服务的团队交付插件时,我们专门附了一页接入说明,省了他们不少沟通成本。
插件不能做的事比想象中多
- 不能调用
wx.login直接拿 code,得让宿主传 openid 进来; - 不能使用部分支付相关接口,涉及资金的逻辑要放在宿主侧;
- 不能跳转宿主未在 plugin.json 里声明过的页面路径。
所以设计插件接口时,我习惯先画一张「谁负责什么」的表:插件负责展示和计算,宿主负责身份、支付、跳转。边界清晰了,后面联调就快。
什么场景值得做成插件
不是所有功能都适合插件化。我的判断标准有三条:
- 同一套能力要在多个小程序间复用,比如多门店、多品牌;
- 能力相对独立,和宿主业务耦合低,比如客服、地图选点、表单引擎;
- 有对外输出需求,想做成标准化能力给同行用。
反过来,强依赖宿主用户体系、频繁改动的核心交易流程,老老实实写在主包里更省心。插件每次发版都要审核,改得勤反而拖慢节奏。
一点本地视角
在石家庄做小程序开发这些年,接触的客户以实体零售、餐饮、本地服务为主。他们的共同点是:预算有限,但业务场景真实,经常一个老板手里有好几个门店小程序。插件化对这类客户其实很划算——一次投入,多店复用,后续改一处全部生效。知码客一直信的「知码识途、匠心铸客」,落到插件开发上,就是把重复的活儿抽象掉,把省下的时间花在真正影响体验的细节上。如果你也在石家庄做小程序,手里有多个相似项目,不妨先想想哪些模块可以抽成插件,这比堆人力靠谱得多。

评论 (0)
还没有评论,快来抢沙发吧~