本文介绍如何将 uni-app 项目编译为小程序插件。如果您想了解如何在 uni-app 中引用和使用小程序插件,请参考另一篇文档:使用小程序插件。
小程序插件规范由小程序厂商定义,插件是对一组 js 接口、自定义组件或页面的封装,用于嵌入到小程序中使用。uni-app 不仅可以开发完整的小程序,还可以编译为小程序插件。
平台差异说明
各平台对编译为小程序插件的支持情况如下:
- 微信小程序:√
- 支付宝小程序:√(从版本 3.2.9+ 开始支持)
- 百度小程序:x
- 抖音小程序、飞书小程序:x
- QQ 小程序:x
- 快手小程序:x
- 京东小程序:x
- 小红书小程序:x
注意
- 开发微信小程序插件时,基础库版本从 1.9.6 开始支持(如果插件包含页面,则需要基础库版本 2.1.0)。
- 开发支付宝小程序插件时,支付宝 IDE 版本要求在 0.60 及以上。
插件目录结构
编译到微信小程序插件的结果会生成特定的目录结构,您可以在项目根目录的 dist/dev/mp-weixin/ 下找到插件代码。
插件配置文件
在 uni-app 项目中,plugin.json 文件与 pages.json 同级,用于向第三方小程序声明所有开放的组件、页面和 js 接口。
-
微信小程序 (mp-weixin):
publicComponents:列出所有向小程序开放的自定义组件。pages:列出所有向小程序开放的页面。main:插件面向第三方小程序的 js 接口。
-
支付宝小程序 (mp-alipay):
publicComponents:列出所有向小程序开放的自定义组件。publicPages:列出所有向小程序开放的页面。pages:列出插件所有页面(包括开放和不开放的)。main:插件面向第三方小程序的 js 接口。
注意:
- 微信小程序的
pages项与支付宝小程序的publicPages项作用一致。 - 支付宝小程序中供外部使用的页面需要在
pages中声明,且为数组类型。 - 由于两端格式不一致,可以在
plugin.json中使用条件编译来处理差异。
编译步骤
- 将 CLI 创建的工程编译器依赖更新到 3.2.1 以上(更新方法参考 官方文档)。
- 执行命令行:
yarn dev:mp-weixin -- --plugin plugin-name,其中plugin-name为插件包的名字。 - 编译后,插件代码位于
项目根目录\dist\dev\mp-weixin\plugin-name目录中。 - 支付宝小程序平台插件编译功能后续发布,请留意更新日志。
如何在项目中使用插件
- 如果宿主小程序是 uni-app 项目,在
manifest.json中配置相关信息即可,详情参考 uni-app 文档。 - 如果宿主为原生小程序,在项目的
app.json中配置:
在插件中使用条件编译
有时项目需要同时编译为插件和正常小程序,但某些 API 可能不适用于两端,此时可以使用自定义条件编译来区分。
- 在
package.json中添加自定义条件编译配置,详情参考 uni-app 条件编译文档。 - 在代码中使用条件编译指令,例如
#ifdef MP-WX-PLUGIN。 - 编译时执行命令:
yarn dev:custom mp-wx-plugin --plugin test-plugin,可将此脚本写入package.json的scripts中以简化操作。
注意
- 组件在插件内部未使用时,如果需要在宿主小程序中使用,必须在
main.js中引入,否则编译后会丢失。 - 插件中编写的页面需要在
pages.json中声明。 - 如果有多个 uni-app 编译的插件运行在同一个小程序中,确保插件名称不重复。
- 插件名称不要包含特殊字符(如
\),-会被自动替换为_,其他特殊字符也应避免。 - 各家小程序插件对 API 的支持情况不同,具体请查阅小程序官方文档。