egg插件

1.为什么要插件

我们在使用 Koa 中间件过程中发现了下面一些问题:

中间件加载其实是有先后顺序的,但是中间件自身却无法管理这种顺序,只能交给使用者。这样其实非常不友好,一旦顺序不对,结果可能有天壤之别。

中间件的定位是拦截用户请求,并在它前后做一些事情,例如:鉴权、安全检查、访问日志等等。但实际情况是,有些功能是和请求无关的,例如:定时任务、消息订阅、后台逻辑等等。

有些功能包含非常复杂的初始化逻辑,需要在应用启动的时候完成。这显然也不适合放到中间件中去实现。

综上所述,我们需要一套更加强大的机制,来管理、编排那些相对独立的业务逻辑。

2.中间件、插件、应用的关系

一个插件其实就是一个『迷你的应用』,和应用(app)几乎一样:

它包含了 Service、中间件、配置、框架扩展等等。

它没有独立的 Router 和 Controller。

它没有 plugin.js,只能声明跟其他插件的依赖,而不能决定其他插件的开启与否。

-他们的关系是:

应用可以直接引入 Koa 的中间件。

插件本身可以包含中间件。

多个插件可以包装为一个上层框架。

3.使用插件

插件一般通过 npm 模块的方式进行复用:

$ npm i egg-mysql --save

然后需要在应用或框架的 config/plugin.js 中声明:

// config/plugin.js // 使用 mysql 插件

exports.mysql = {

        enable:true,

        package:'egg-mysql',

};

4.package 和 path

package 是 npm 方式引入,也是最常见的引入方式

path 是绝对路径引入,如应用内部抽了一个插件,但还没达到开源发布独立 npm 的阶段,或者是应用自己覆盖了框架的一些插件// config/plugin.js

constpath =require('path');

exports.mysql = {

        enable:true,

        path: path.join(__dirname,'../lib/plugin/egg-mysql'),

};

5.插件配置

插件一般会包含自己的默认配置,应用开发者可以在 config.default.js 覆盖对应的配置

6.插件开发

$ npm init egg --type=plugin

7.插件依赖

8.应用

1)//应用启动时做一些初始化工作

app.beforeStart(async() => {

    await app.myClient.ready();

  });

2)设置定时任务

你可能感兴趣的:(egg插件)