架构
考试、联系、时长、秒过都作为插件单独编写,最终通过plugins文件下下的index.ts统一暴露,如果需要扩展功能,可以自行扩展插件
每一个插件都有自己的设置,在index.ts中统一注册,最终呈现于设置面板
WE Learn中的每一种题型(每一种题型对应多个课程)都有单独的parser和solver,parser仅负责解析答案,solver仅负责自动答题,在exercise插件下的main.ts中同一调度
所以可以单独为一种题型写parser和solver
main.ts是入口文件
作为chrome扩展时
- 通过inject.ts注入main.ts,以获取原生context访问权限(unsafeWindow)
- main.ts通过bridge.ts与content.ts实现通信,content.ts转发跨域请求至background.ts
插件
- 考试、练习、时长都作为插件单独编写,尽量解耦,新增插件也应如此,每一个插件只服务于一项主要功能
- 每一个插件都应符合以下规范
- main.ts中放置主要逻辑
- 需要暴露给外部的函数,通过index.ts转发
- initial.ts中放置需要在app初始化时执行的函数,并在plugins文件夹下的initial.ts中统一注册
- 只调用,实现最好放在main.ts中
- setting.ts暴露所有插件相关的设置,并在index.ts中统一注册,最终呈现于设置面板
- main.ts中放置主要逻辑
utils下
- 实现了对网络请求的封装
- request-base.ts
- bridge.ts
- proxy.ts
- 所有请求
- requests.ts
- 创建容器的封装
- container.ts
- 通用工具
- common.ts
- 用户设置相关
- settings.ts
- 实现了对网络请求的封装
views中
- Panel.vue负责渲染悬浮窗
- Setting.vue负责渲染控制面板
tests
- 尚未开始