Thinkjs3 中自定义加载,实现插件目录功能

近期用 thinkjs3 实验业务的时候,希望拥有『业务插件』功能,如果登录验证码、短信发送、第三方登录等,这样团队在开发的过程中就可以只去做相应的业务插件,而非直接在基础项目中硬编码。

thinkjs3 框架提供的框架级的插件机制是:

  • 基于 Koa 2.x,兼容 middleware
  • 支持 Extend、Adapter 等插件方式

如果想实现我要达到的效果还是没有现成的机制,需要做些扩展,参考了一些基于 thinkjs 的项目,如果 CmsWing,它实现的插件功能比较简单粗暴,它的插件目录如下:

├── controller
│   ├── admin
│   ├── api
│   ├── center
│   ├── cmswing
│   ├── ext                              # 插件主目录
│   │   ├── ad                         # 具体插件(广告插件)
│   │   │   ├── admin.js          # 插件的 controller
│   │   │   ├── config.js         # 插件配置
│   │   │   ├── model             # 插件 model
│   │   │   └── view               # 插件视图文件目录
│   │   ├── atlas
│   │   ├── ……
│   ├── home
│   └── mod

直接嵌入进 controller 中,可以读性比较差,且概念上不好理解,但是简单好用。

我们希望效果如下:

.
├── addons                        # 插件目录
│   ├── ad                           # 插件(广告)
│   │   ├── config.js            # 插件配置
│   │   ├── controller          # 插件 controller 目录
│   │   ├── model                # 插件 model 目录
│   │   └── views                 # 插件视图文件 目录
│   └── captcha
├── admin
│   ├── controller
│   └── views
├── api
├── common
└── home

这样我们认为是比较方便后续做插件开发,拥有独立的目录,和独立的逻辑组成,插件有自己的 controller、model、view,以独立文件夹存在,在整个工程中有独立的插件集合目录。

前文说过 thinkjs 本身并没有提供这样的机制,因些要实现起来还需要做些工作:
1、用 thinkjs 建立一个支持多模块的工程
2、建立 addons 目录
3、在 common/bootstrap 的 worker 中将 addons 目录下的插件加载处理

先挖个坑,这两天补完后续

你可能感兴趣的:(Thinkjs3 中自定义加载,实现插件目录功能)