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

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

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

2. 插件(Plugins)

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

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

image

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

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

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

插件在Egg中的应用

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

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

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<EggAppConfig>;
    // ...
    config.yourplugin = {
        field1, field2
    };
}

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

步骤5:使用插件

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容