专注小程序 / APP 开发,用代码改变生活

获取方案
全国分站 主站首页 北京分站 石家庄分站 唐山分站 保定分站 廊坊分站 沧州分站 郑州分站 邯郸分站

小程序插件开发:我踩过的那些坑

小程序开发 2026-11-01 0 阅读 0 点赞 原创

上个月接了个活,客户要在自己的小程序里接入一个「预约排号」功能。我第一反应是直接写页面,后来一想,这功能他三个小程序都要用,干脆做成插件。结果这一做,踩的坑比预想的多得多。今天就把这次插件开发的经历捋一遍,给想尝试的朋友省点时间。

小程序插件开发:我踩过的那些坑

先想清楚:什么时候该做插件

插件不是万能药。我见过有人把整个项目拆成七八个插件,最后维护起来比单体还累。我的判断标准很简单:

  • 这段功能要在多个小程序里复用,且逻辑相对独立;
  • 功能边界清晰,比如登录、支付、地图选点、客服;
  • 你愿意承担额外的审核和版本管理成本。

如果只是单个项目里的模块,用自定义组件就够了,别上插件。插件发布要走审核,每次更新都得重新提审,这个成本很多人一开始没算进去。

开发前的准备工作

做插件得先在小程序后台申请,拿到 AppID 之后,在开发者工具里新建「小程序插件」项目。这里有个容易忽略的点:插件项目和小程序项目是两套目录结构,插件里没有 app.json 那套页面配置,取而代之的是 plugin.json。

{
  "publicComponents": {
    "booking-panel": "components/booking-panel/index"
  },
  "pages": {
    "booking-list": "pages/booking-list/index"
  },
  "main": "index.js"
}

publicComponents 是对外暴露的组件,pages 是插件自己的页面。只有写进这里的,宿主小程序才能用。我第一次没配 publicComponents,宿主那边死活引不进来,查了半天文档才发现。

宿主怎么引入

宿主小程序要在 app.json 里声明插件,然后在页面里用 plugin:// 协议引用组件或跳转页面。

{
  "plugins": {
    "myBooking": {
      "version": "1.0.0",
      "provider": "插件AppID"
    }
  }
}
<booking-panel plugin-id="myBooking" />

注意组件标签名要用插件里注册的名字,不是文件名。这个细节坑过我不止一次。

真正麻烦的地方:通信与作用域

插件和宿主之间是隔离的。插件拿不到宿主的全局数据,宿主也直接读不到插件内部状态。所有交互都得走属性传递和事件回调,或者用 requirePlugin 拿插件暴露的接口。

我这次的做法是:插件暴露一个 init 方法,宿主把用户信息和接口地址传进去;插件内部通过 triggerEvent 往外抛事件,宿主监听后自己处理业务逻辑。这样职责清楚,插件不碰宿主的登录态,宿主也不用关心插件怎么渲染。

一个血泪教训:插件里不要直接调宿主小程序的接口路径,把请求封装成可配置的,否则换个项目就得改代码重新提审。

审核与版本的那些事

插件审核比普通小程序还严一点。我提交时被打回过一次,原因是插件简介写得太笼统,审核员看不出具体用途。后来把功能点、使用场景、截图都补上才过。

还有版本管理。插件发布后,宿主引用的是具体版本号。你更新了插件,宿主不会自动升级,得手动改 version 再提审。所以我在插件里尽量保持接口向后兼容,新增字段而不是改老字段,减少宿主被迫升级的次数。

值不值得做

说实话,如果只服务一两个项目,插件带来的审核和联调成本可能超过收益。但如果你手里有一批同类型的小程序,或者想把某个能力做成产品对外提供,插件是个正经路子。它把能力封装成标准件,宿主接入只要几行配置,长期看是省事的。

我的建议是:先用自定义组件把功能跑通,验证确实要复用,再抽成插件。别一上来就奔着插件去,容易在隔离机制和审核流程上耗掉太多精力。先把业务跑起来,架构的事可以晚一步。

小程序组件开发:别急着封装小程序上线前,我踩过的测试坑

评论 (0)

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

好想法,值得被认真交付

从小程序、APP 到全栈网站,一站式把想法变成可落地的产品

微信咨询

微信扫码,直接沟通需求