-
Notifications
You must be signed in to change notification settings - Fork 69
插件系统
Icemic edited this page Mar 11, 2017
·
2 revisions
假设现在有一个外部插件名叫 myPlugin
,你可以这样的方式使用它:
- 首先进行导入,导入可以在程序的任何地方进行,但只有在导入之后才能使用该插件
import { core } from 'avg-core';
import MyPlugin from './myplugin';
// do something...
core.installPlugin(MyPlugin);
// do something else...
- 使用插件
你可以在任何地方使用插件,如函数、组件类等,通过 core.plugins.<name>
的方式访问你导入的插件。
值得注意的是,插件名 并不一定是你导入它时使用的类名称,名称是由插件编写者指定的。具体的名称和功能函数请参考插件编写者提供的文档。
下面给出一个在函数中使用时的例子:
import { core } from 'avg-core';
function yourMethod() {
core.plugins.myPlugin.hello();
}
一个编写好的插件即是一个 Class,所以编写插件和通常的编写 JS 模块思路是一致的,只要最终将 Class 导出即可。
但这并不以为着随心所欲,仍然要遵循如下的约定:
- 构造函数的第一个参数是
core
,在将你编写的插件注册到 AVG.js 时,AVG.js 会将自身的核心实例传递给你编写的 Class。 - 请在构造函数中执行
core.plugins.<name> = object
来将功能挂接到核心上,务必使用与插件本身相关的名称,并避免与他人的插件命名重复。 - 若你的插件需要依赖其他插件,请在
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()
调用插件功能。