用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 实战教程 查看内容

微信多插件服务研发

Rolan 2021-1-14 17:07

不过当业务体系需要由多插件共同来运作时,那么如何处理插件与插件间的关系,如何处理插件与小程序间的关系,一旦插件数增多研发体系则会变得极其复杂。 ...

如何开发一个插件并不会过多说明,也相对简单。不过当业务体系需要由多插件共同来运作时,那么如何处理插件与插件间的关系,如何处理插件与小程序间的关系,一旦插件数增多研发体系则会变得极其复杂。往往采用插件模式做业务支撑时,每一个插件开发背后可能是一个部门,或者是一个公司,那么跨团队或跨企业的协作开发是很艰难的。


小程序如何插件化


插件开发和小程序开发非常相似,小程序的代码可以直接移植到插件中,开发上只有几点需要注意:

  1. 请详细查看插件的 API 限制。
  2. 授权相关的需要使用插件功能页,配合小程序一起开发。
  3. 开发模式使用插件开发模式,而不再是小程序开发模式。
  4. 插件提审需要编写开发说明文档。

(注:文档说明很重要,没有提及的社区也都有说明,只要是小程序上的业务,插件中也一定有办法实现的)


多插件接入基础规范

为什么要设定插件的基础规范,也就是插件的接入要求(这块内容,往往是小程序方会有要求)。

1.体积

首先很重要的一点就是“体积”问题,整个小程序的体积限制是 20MB,同时每个分包的限制是 2MB,插件的体积是会计算到每个引用的包内,那么插件体积必须在 2MB 内(最低要求),但是往往我们要提前预设后期的发展规划,小程序会达到的上限,以及留给插件体积的上限,以及预计插件的接入数。同样的还需要考虑的一点是,如果插件是以组件的形式接入,那么一般是放主包内的,那么组件插件的体积就一定要好好限制,建议接入主包的插件尽量都在 100KB 内吧。

2.参数

其次需要定义主程序能够提供给插件的“参数列表”,一般需要包含的数据有appId,mobile,openId,timestamp,sign,debug,包含了用户信息,加密签名,以及环境切换(注:因为涉及到多插件间的联调,环境切换需要改为运行时,这个很重要)。

3.基础库

然后我们还需要定义调式基础库版本,目前建议 2.11.1。

4.版本更新

 [XXX 插件名称] [版本号]1.0.2
 A:新增 XXXXXX 功能
 F:修复 XXXXXX 的缺陷
 U:更新 优化 XXXXX 流程
 U:更新 优化 XXXXX 流程
复制代码

(注:当然还有更多的规范可以做定义,包括服务端接口规范,压测要求,账号同步流程,订单等等就不过多说明了)

插件功能模块分配

首先如果是在主包中存在插件组件的,那么为了保障主包的大小,以及首次加载体验,我们可以将插件组件中的二级内容,移动到分包插件中,原则上就一句话,“尽量保证主包足够小。”

然后如果由于业务原因,我们存在主插件和分插件的概念,那么可以在主插件中暴露一部分基础能力,比如说登录授权,用户信息,网络请求,数据统计等基础功能,从而减少总插件的体积。

如果各个插件完全不存在关联性,那么就只能各自管理各自的,但同样的主程序可以暴露一些基础功能,比如加解密库,路由处理等等。


插件基础能力拓展

插件中存在部分基础能力限制,那么可以通过小程序 Bridge 的方式给插件做拓展。方案图如下:


插件间相互交互

插件间的交互其实就如文档说明的一样,不外乎跳转其他插件页面,加载其他插件组件,调用其他插件方法。插件方法,建议可以暴露一个消息通信对象,多插件间共用消息通信(可用 EventEmitter),具体如下:

const xxPlugin = requirePlugin('xxPlugin') // 获取xx插件的暴露对象

xxPlugin.EventEmitter.off('getUserInfo') // 移除重复监听
xxPlugin.EventEmitter.on('getUserInfo', () => {
  xxPlugin.EventEmitter.emit('setUserInfo', {
    mobile: 'xxxx',
  })
})
复制代码

(注:在插件组件不支持 wx.navigateTo 等路由 API,可以通过 Bridge 的方式拓展基础能力。在插件中使用 Bridge,可能会遇到 wx 作用域的限制,可以在插件调用 Bridge 时绑定 wx 作用域。)


多插件间的联调模式

当开发一个插件时,可以通过插件开发模式,调试单个插件,但若是涉及到多个插件需要联调时,那么只能以小程序的模式,加载多个插件进行测试。可以通过提供插件开发版本号,集成到主程序的开发版中进行集成测试。这时运行时环境切换的功能则非常重要了,同一份代码就方便调试正式和测试环境,而不用频繁的进行打包操作。

值得一提的是,当多团队开发时,往往插件开发者不具有小程序的开发权限,所以无法做到快速的集成调试和修改。那么建议各个插件开发者们,自研一个模型小程序,保持运行环境与主程序一致,可以极大的提高开发调试的时间。


作者:beezend
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏