Skip to content

插件系统

Icemic edited this page Mar 11, 2017 · 2 revisions

插件系统

使用插件

假设现在有一个外部插件名叫 myPlugin,你可以这样的方式使用它:

  1. 首先进行导入,导入可以在程序的任何地方进行,但只有在导入之后才能使用该插件
import { core } from 'avg-core';
import MyPlugin from './myplugin';

// do something...

core.installPlugin(MyPlugin);

// do something else...
  1. 使用插件

你可以在任何地方使用插件,如函数、组件类等,通过 core.plugins.<name> 的方式访问你导入的插件。

值得注意的是,插件名 并不一定是你导入它时使用的类名称,名称是由插件编写者指定的。具体的名称和功能函数请参考插件编写者提供的文档。

下面给出一个在函数中使用时的例子:

import { core } from 'avg-core';

function yourMethod() {

  core.plugins.myPlugin.hello();

}

编写一个插件

一个编写好的插件即是一个 Class,所以编写插件和通常的编写 JS 模块思路是一致的,只要最终将 Class 导出即可。

但这并不以为着随心所欲,仍然要遵循如下的约定:

  1. 构造函数的第一个参数是 core,在将你编写的插件注册到 AVG.js 时,AVG.js 会将自身的核心实例传递给你编写的 Class。
  2. 请在构造函数中执行 core.plugins.<name> = object 来将功能挂接到核心上,务必使用与插件本身相关的名称,并避免与他人的插件命名重复。
  3. 若你的插件需要依赖其他插件,请在 constructor 中检查并给出提示

如下是一个示例

import { core } from 'avg-core';

const logger = core.getLogger('MyPlugin');

export default class MyPlugin {
  constructor(core) {
    // check dependencies
    if (core.plugins.dependA && core.plugins.dependB) {
      core.plugins.myPlugin = this;
    } else {
      logger.warn('You should install dependA and dependB.');
    }
  }
  hello() {
    logger.debug('You called `hello()`')
  }
}

这样,他人就能够通过 core.plugins.myPlugin.hello() 调用插件功能。

Clone this wiki locally