插件
插件概述
插件是对框架能力的增强,它可以保证 yunfly
框架本身的简洁、稳定、高效,还可以促进业务逻辑的复用,生态圈的形成。
为什么要用插件
- 中间件加载其实是有先后顺序的,
koa
中间件无法管理这种顺序 - 中间件的定位是拦截用户请求,并在它前后做一些事情,例如:
鉴权
、安全检查
、访问日志
等等。但实际情况是,有些功能是和请求无关的,例如:redis
、apollo
、定时任务
、消息订阅
、业务逻辑
等等。 - 有些功能包含非常复杂的初始化逻辑,需要在应用启动的时候完成。这显然也不适合放到中间件中去实现。
综上几点,我们需要一套更加强大的机制,来管理、运行那些相对独立的业务逻辑。
插件使用
下面以 redis
插件为案例
-
- 安装
redis npm包
- 安装
yarn add @yunflyjs/yunfly-plugin-redis
-
config/config.plugin.ts
下声明插件
src/config/config.plugin.ts
/**
* yunfly 插件
* 数组顺序就是插件的加载顺序
*/
const plugins: {[key:string]: string}[] = [
/**
* redis 插件
* 使用npm包模式
*/
{
name: 'redis',
package: '@yunflyjs/yunfly-plugin-redis'
}
];
//
export default plugins;
-
config.default.ts
中新增redis
插件配置
src/config/config.default.ts
/**
* 使用私有的redis库
*/
config.redis = () => {
return {
enable: true,
host: 'xxx',
password: 'xxx',
port: 'xxx',
}
};
插件配置参数说明
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
name | string | 是 | 当前插件配置的唯一标识name , 跟config.default.ts 中字段保持一致, name 字段很有用,它用来标识是否有重复插件 和插件覆盖 的能力 |
package | string | 否 | npm包 插件名,例如: @yunflyjs/yunfly-plugin-redis 。 (备注:package 与path 必须有一个字段为真) |
path | string | 否 | 本地开发 插件目录地址 (备注:package 与path 必须有一个字段为真) |
async | boolean | 否 | 若为 true ,表示同步加载插件,加载完才会加载下一个插件;否则为异步加载,不阻塞其他插件加载。 |
lifeHook | string | 否 | 可选值:beforeStart 、configDidReady 、appDidReady 、afterStart ,表示在哪个生命周期进行加载。默认在 appDidReady 周期下加载插件。参考:框架生命周期介绍 |
priority | number | 否 | 默认值为:50, 值越小越先执行插件 |
package 和 path
package
是npm
方式引入,也是最常见的引入方式path
是绝对路径引入,如应用内部抽了一个插件,但还没达到开源发布独立npm
的阶段
关于这两种方式的使用场景,可以参见:渐进式开发。
开发插件
当前文档只是对插件使用的描述,若想要了解更多请查看:插件开发篇