通过jint+ es6 模块设计一个插件化系统
属于一个简单设想以及简单的原型代码验证,主要是利用jint 对于es6 支持的特点,以及约定
设计思路
因为jint 支持es6 模块,同时提供了native 方法暴露到js 中的能力(当然还有native 代码调用js 能力),对于一个插件系统,我们在native runtime 中会提供一些common 方法(比如auth,dao,helper,biz service,utils 等能力),然后开发的js 插件可以直接使用此能力,这样我们的代码就不用更新客户端,或者服务代码了,直接可以基于js 进行业务功能控制
- 参考架构
- 简单说明
native 代码通过jint 暴露一些common api 给js ,比如dao,auth,context,utils,service 等,同时native app 也有进行plugin 管理的职责,对于js plugin 直接可以引用native 暴露的es 模块,当然为了方便js plugin 的开发,我们也得提供一些周边能力,比如基于typescript 的类型定义,plugin 构建,plugin 发布,以及plugin 部署等能力,这样我们的插件系统就比较灵活强大的了,就具有很好的工程能力了
说明
以上只是一个简单的设计说明,后边会简单介绍下代码原型验证的一些细节,实际上不管是否基于jint 思路上是类似的,目前已经有不少c# js 引擎了,比如微软的node-api-dotnet, ClearScript 等
参考资料
https://github.com/sebastienros/jint