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

  1. 簡單的骨架認知
  2. 插件使用(Plugins)
  3. 持久層方案(egg-sequelize)
  4. Worker 和 高效負載均衡
  5. Agent 代理角色
  6. 定時任務

筆者的其他文章推薦: 《JS 函數(shù)式編程思維簡述》

2. 插件(Plugins)

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

? ? ? ?首先我們需要明確的是,什么是插件?插件在應用中扮演的角色就是,提升應用擴展能力的獨立的功能封裝。比如我們當前的每一個應用都是一個機器人,他們大概長這個樣子:

image

我們在這些項目中,可以提取兩類功能:具備通用性的功能不具備通用性的功能。他們通常有以下區(qū)別:

名稱 注釋
通用性 并非每個應用必須得有的可選功能,可由使用者自由選擇是否擴展的能力
非通用性 只在某個應用中必須存在,無法擴展給別的應用的主要業(yè)務能力

因此,插件的設計原則是:具備通用性的功能,可以將其抽離作為插件備用。
例如上圖的這四個機器人,我們可以發(fā)現(xiàn)他們都具備一些相似的特性,以及完全不同的特性:有的機器人裝載的手臂是相同的,有的裝載的腿是相同的。這些相同或相似的部分,我們便可以獨立抽象為一個插件,在有新的機器人需要創(chuàng)建時,有選擇性的考慮是否添加該插件。這樣設計的好處是:有效的減少了相似的代碼在應用中重復出現(xiàn)的概率,提高了可擴展和可維護性。

插件在Egg中的應用

原則: Egg 本身未攜帶過多插件,僅配備了幾個企業(yè)級常用的插件,如 onerror、logrotatori18n 等。更多插件應由應用開發(fā)者自行選擇擴展,或自行開發(fā)。

應用表現(xiàn): 擴展已有的 Egg 內置對象。如使用 egg-sequelize 插件后,在 Service 部分便可以使用 ctx.model.xxx 的方式調用 sequelize 的數(shù)據(jù)模型,該插件在實現(xiàn)原有的 ORM 操作過程中,將操作對象擴展到了 Context 對象上。

image

步驟1:插件選擇

我們可以在 Egg 相關社區(qū),尋找我們感興趣的插件?;蛲ㄟ^ 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
    };
}

在應用的配置文件中,對插件的初始化數(shù)據(jù),會覆蓋掉插件中的原有配置,并傳遞給插件本身進行處理(實際上每一個插件也是一個小的應用)。

步驟5:使用插件

關于插件的使用方式,根據(jù)插件的構建方式不同而不同。每一個插件掛載到哪一個內置對象中,通常插件都會有詳細的說明文檔描述。我們可以尋找插件項目下的 README.md 查看。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容