manifest.json漏配plugins和permission必然导致微信小程序插件失败;plugins须与permission同级声明,version须精确匹配平台可用版本,调用前需校验API存在性,分包页面还需在pages.json中配置usingPlugins。
manifest.json 里漏配 plugins 和 permission 就必然失败
微信小程序插件(如腾讯视频、群工具、订阅消息等)不是 npm 包,不能靠 import 或 require 直接加载。必须在 manifest.json 的 mp-weixin 节点下显式声明插件 id、版本和权限,否则真机运行时会报 "plugin not found" 或静默失败。
常见错误配置:
-
plugins写在permission里面(应为同级字段) -
version填"latest"或留空(必须与微信公众平台插件详情页中“当前可用版本”完全一致) - 插件
provider(即 AppID)抄错一位,或用了测试号 AppID
正确写法示例(以群工具插件为例):
{"mp-weixin": {
"plugins": {
"groupTool": {
"version": "1.2.0",
"provider": "wx1234567890abcdef"
}
},
"permission": {
"scope.userLocation": {
"desc": "用于获取群内成员所在城市,匹配本地活动"
}
}
}}
requirePlugin 后不校验 API 存在性就调用会崩溃
插件 JS API 不是全局可用的,requirePlugin('xxx') 返回值可能为 undefined,尤其在分包页面、冷启动或网络未就绪时。直接调用其方法(如 getGroupList)会导致 TypeError: Cannot read property 'xxx' of undefined。
必须在每次调用前做双重判断:
- 检查
requirePlugin返回值是否为对象 - 检查目标方法是否为函数类型(
typeof plugin.getGroupList === 'function') - 避免在
data或computed中提前 require —— 必须放在事件回调或onLoad等生命周期内动态引入
示例片段:
const groupTool = requirePlugin('groupTool');
if (!groupTool || typeof groupTool.getGroupList !== 'function') {
console.error('群工具插件未加载或 API 不可用');
return;
}
groupTool.getGroupList({ success: ... });
插件调用触发新权限弹窗时没配 permission 字段
很多插件(如群工具的 openGroupChat、腾讯视频的播放控制)内部会调用微信原生接口(如 wx.openSetting、wx.chooseLocation),这些接口本身受权限管控。如果只配了插件,但没在 manifest.json 的 permission 中声明对应 scope,用户点击后会直接进 fail 回调,错误信息类似 "the api need to be declared in the permission field"。
需要同步配置的常见组合:
- 群工具 +
scope.userLocation(用于定位群成员位置) - 腾讯视频插件 +
scope.camera(若启用扫码跳转) - 订阅消息插件 +
scope.subscribeMessage(虽然该 scope 不需 desc,但必须声明)
注意:scope.subscribeMessage 的 desc 字段可省略,但字段本身不能缺失,否则 uni.requestSubscribeMessage 会静默失败。
分包页面 requirePlugin 失败的隐藏原因
uni-app 分包加载插件有两条路径:要么在 pages.json 的分包配置中显式声明 usingPlugins,要么把插件相关逻辑移到主包。漏掉前者,即使 manifest.json 配对了,分包页面中 requirePlugin 仍返回 undefined。
正确做法(以分包 subN/pages/group/index.vue 为例):
"subN": {
"root": "subN",
"pages": [{
"path": "pages/group/index",
"usingPlugins": ["groupTool"]
}]
}
另外,真机测试时必须通过合法入口进入(如群聊卡片打开群工具页面),否则插件上下文不完整,API 不可用 —— 这个限制无法绕过,模拟器也测不出。










