文档
基础功能
插件

插件

插件概述

插件是对框架能力的增强,它可以保证 yunfly 框架本身的简洁、稳定、高效,还可以促进业务逻辑的复用,生态圈的形成。

为什么要用插件

  1. 中间件加载其实是有先后顺序的, koa 中间件无法管理这种顺序
  2. 中间件的定位是拦截用户请求,并在它前后做一些事情,例如:鉴权安全检查访问日志等等。但实际情况是,有些功能是和请求无关的,例如:redisapollo定时任务消息订阅业务逻辑等等。
  3. 有些功能包含非常复杂的初始化逻辑,需要在应用启动的时候完成。这显然也不适合放到中间件中去实现。

综上几点,我们需要一套更加强大的机制,来管理、运行那些相对独立的业务逻辑。

插件使用

下面以 redis 插件为案例

    1. 安装 redis npm包
yarn add @yunflyjs/yunfly-plugin-redis
    1. 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;
    1. config.default.ts 中新增 redis 插件配置
src/config/config.default.ts
/**
 * 使用私有的redis库
 */
config.redis = () => {
  return {
    enable: true,
    host: 'xxx',
    password: 'xxx',
    port: 'xxx',
  }
};

插件配置参数说明

字段类型必选说明
namestring当前插件配置的唯一标识name, 跟config.default.ts中字段保持一致, name 字段很有用,它用来标识是否有重复插件插件覆盖的能力
packagestringnpm包插件名,例如: @yunflyjs/yunfly-plugin-redis。 (备注:packagepath必须有一个字段为真)
pathstring本地开发插件目录地址 (备注:packagepath必须有一个字段为真)
asyncboolean若为 true,表示同步加载插件,加载完才会加载下一个插件;否则为异步加载,不阻塞其他插件加载。
lifeHookstring可选值:beforeStartconfigDidReadyappDidReadyafterStart,表示在哪个生命周期进行加载。默认在 appDidReady 周期下加载插件。参考:框架生命周期介绍
prioritynumber默认值为:50, 值越小越先执行插件

package 和 path

  • packagenpm 方式引入,也是最常见的引入方式
  • path 是绝对路径引入,如应用内部抽了一个插件,但还没达到开源发布独立 npm 的阶段

关于这两种方式的使用场景,可以参见:渐进式开发

开发插件

当前文档只是对插件使用的描述,若想要了解更多请查看:插件开发篇