Egg 框架简述 (二):插件使用

  1. 简单的骨架认知
  2. 插件使用(Plugins)
  3. 持久层方案(egg-sequelize)
  4. Worker 和 高效负载均衡
  5. Agent 代理角色
  6. 定时任务

笔者的其他文章推荐: 《JS 函数式编程思维简述》

2. 插件(Plugins)

官方文档:https://eggjs.org

       首先我们需要明确的是,什么是插件?插件在应用中扮演的角色就是,提升应用扩展能力的独立的功能封装。比如我们当前的每一个应用都是一个机器人,他们大概长这个样子:

Egg 框架简述 (二):插件使用_第1张图片
image

我们在这些项目中,可以提取两类功能: 具备通用性的功能不具备通用性的功能。他们通常有以下区别:

名称 注释
通用性 并非每个应用必须得有的可选功能,可由使用者自由选择是否扩展的能力
非通用性 只在某个应用中必须存在,无法扩展给别的应用的主要业务能力

因此,插件的设计原则是:具备通用性的功能,可以将其抽离作为插件备用。
例如上图的这四个机器人,我们可以发现他们都具备一些相似的特性,以及完全不同的特性:有的机器人装载的手臂是相同的,有的装载的腿是相同的。这些相同或相似的部分,我们便可以独立抽象为一个插件,在有新的机器人需要创建时,有选择性的考虑是否添加该插件。这样设计的好处是:有效的减少了相似的代码在应用中重复出现的概率,提高了可扩展和可维护性。

插件在Egg中的应用

原则: Egg 本身未携带过多插件,仅配备了几个企业级常用的插件,如 onerrorlogrotatori18n 等。更多插件应由应用开发者自行选择扩展,或自行开发。

应用表现: 扩展已有的 Egg 内置对象。如使用 egg-sequelize 插件后,在 Service 部分便可以使用 ctx.model.xxx 的方式调用 sequelize 的数据模型,该插件在实现原有的 ORM 操作过程中,将操作对象扩展到了 Context 对象上。

Egg 框架简述 (二):插件使用_第2张图片
image

步骤1:插件选择

我们可以在 Egg 相关社区,寻找我们感兴趣的插件。或通过 GitHub 搜索 egg-plugin ,寻找相关插件。

步骤2:安装、配置插件

Egg 插件通常以 NPM 包的形式存储于远程库中,我们搜索到感兴趣的插件后,直接通过 NPM 便可进行安装:

$ npm i egg-yourplugin --save

在安装之后,于应用中的 package.json 处对其进行配置:

{
  "dependencies": {
    "egg-yourplugin": "^2.1.3"
  }
}

步骤3:启用插件

我们需要在项目中的 ./config/plugin.ts 位置,启用相应的插件。如:

import { EggPlugin } from 'egg';

const plugin: EggPlugin = {
    
    // 启用插件 yourplugin
    yourplugin: {
        enable: true,
        package: 'egg-yourplugin',
    },
}

步骤4:初始化插件

插件启用之后,可以在配置文件中( 如 ./config/config.default.ts ),对插件进行初始化设置:

import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';

export default (appInfo: EggAppInfo) => {
    const config = {} as PowerPartial;
    // ...
    config.yourplugin = {
        field1, field2
    };
}

在应用的配置文件中,对插件的初始化数据,会覆盖掉插件中的原有配置,并传递给插件本身进行处理(实际上每一个插件也是一个小的应用)。

步骤5:使用插件

关于插件的使用方式,根据插件的构建方式不同而不同。每一个插件挂载到哪一个内置对象中,通常插件都会有详细的说明文档描述。我们可以寻找插件项目下的 README.md 查看。

你可能感兴趣的:(Egg 框架简述 (二):插件使用)