# 使用插件

# 添加插件

开发者工具0.1.29版本开始支持插件功能。

# 引入插件代码包

使用插件前,使用者要在 app.json 中声明需要使用的插件,例如:

代码示例:

{
  "plugins": {
    "myPlugin": {
      "version": "1.0.0",
      "provider": "qqidxxxxxxxxxxxxxxxx"
    }
  }
}

1
2
3
4
5
6
7
8
9

如上例所示, plugins 定义段中可以包含多个插件声明,每个插件声明以一个使用者自定义的插件引用名作为标识,并指明插件的 appid 和需要使用的版本号。其中,引用名(如上例中的 myPlugin)由使用者自定义,无需和插件开发者保持一致或与开发者协调。在后续的插件使用中,该引用名将被用于表示该插件。

# 在分包内引入插件代码包

如果插件只在一个分包内用到,可以将插件仅放在这个分包内,例如:

{
  "subpackages": [
    {
      "root": "packageA",
      "pages": ["pages/cat", "pages/dog"],
      "plugins": {
        "myPlugin": {
          "version": "1.0.0",
          "provider": "qqidxxxxxxxxxxxxxxxx"
        }
      }
    }
  ]
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

在分包内使用插件有如下限制:

  • 仅能在这个分包内使用该插件;
  • 同一个插件不能被多个分包同时引用;
  • 目前,还不能从分包外的页面直接跳入分包内的插件页面,需要先跳入分包内的非插件页面、再跳入同一分包内的插件页面。

# 使用插件

使用插件时,插件的代码对于使用者来说是不可见的。为了正确使用插件,使用者应查看插件详情页面中的“开发文档”一节,阅读由插件开发者提供的插件开发文档,通过文档来明确插件提供的自定义组件、页面名称及提供的 js 接口规范等。

# 自定义组件

使用插件提供的自定义组件,和使用普通自定义组件的方式相仿。在 json 文件定义需要引入的自定义组件时,使用 plugin:// 协议指明插件的引用名和自定义组件名,例如:

代码示例:

{
  "usingComponents": {
    "hello-component": "plugin://myPlugin/hello-component"
  }
}

1
2
3
4
5
6

出于对插件的保护,插件提供的自定义组件在使用上有一定的限制:

  • 默认情况下,页面中的 this.selectComponent 接口无法获得插件的自定义组件实例对象;
  • qq.createSelectorQuery 等接口的 >>> 选择器无法选入插件内部。

# 页面

需要跳转到插件页面时,url 使用 plugin:// 前缀,形如 plugin://PLUGIN_NAME//PLUGIN_PAGE, 如:

代码示例:

<navigator url="plugin://myPlugin/hello-page">
  Go to pages/hello-page!
</navigator>

1
2
3
4

# js 接口

使用插件的 js 接口时,可以使用 requirePlugin 方法。例如,插件提供一个名为 hello 的方法和一个名为 world 的变量,则可以像下面这样调用:

const myPluginInterface = requirePlugin('myPlugin')

myPluginInterface.hello()
const myWorld = myPluginInterface.world
1
2
3
4