详解开源的JavaScript插件化框架MinimaJS


Posted in Javascript onOctober 26, 2017

本文介绍我开发的一个JavaScript编写的插件化框架——MinimaJS,完全开源,源码下载地址:https://github.com/lorry2018/minimajs。该框架参考OSGi规范,将该规范定义的三大插件化功能在Node上实现了。MinimaJS三个功能:动态插件化,服务和扩展。该框架基于VSCode开发、使用ES6编码,基于Node 8开发,代码量几千行,非常的简单、优雅、轻量。框架的代码结构划分清晰,命名优雅。

我们先简单看一下,如何来使用这个框架。

通过这几行代码就可以创建一个插件框架,并且从当前的plugins目录下加载插件。

每一个插件在plugins目录下,由plugin.json来定义插件的基本信息、依赖信息、服务和扩展,该文件必须在插件根目录下,并且包含。一个插件由plugin.json和其它文件构成,其它文件为可选,可以包括js、html、css文件等。如下为一个插件示例。对于plugin.json文件,除了id是必填属性,其它均为可选,这意味着最小的插件为一个只定义了plugin.json且该文件只声明插件id。

详解开源的JavaScript插件化框架MinimaJS

通OSGi规范类似,每一个插件可以定义一个激活器,默认为Activator.js,如果命名不是默认值,则需要在plugin.json里面通过activator定义该激活器文件名。一个典型的Activator定义如下,用于声明插件的入口和出口。

这里start与stop分别代表入口和出口,用于服务注册、绑定、事件监听等。

插件间通过服务进行通讯,一个插件注册服务,一个插件消费服务。插件注册可以通过plugin.json来声明,也可以通过激活器start方法的PluginContext参数的addService来注册服务。如下所示,使用plugin.json来注册一个服务。

另一个插件,可以通过激活器来消费服务。

该框架还提供了插件扩展、类加载等特性,可以通过框架提供的实例来探索。以下是一个插件化的REST框架,基于插件化构建的实例,可以通过源码下载获取。

详解开源的JavaScript插件化框架MinimaJS

这个示例演示了Express、Art-Template、WebAPI框架、插件动态扩展、Web轻量框架的构建,详细可以查看实例。

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
accesskey 提交
Jun 26 Javascript
js判断为空Null与字符串为空简写方法
Feb 24 Javascript
gridview生成时如何去掉style属性中的border-collapse
Sep 30 Javascript
分享15个大家都熟知的jquery小技巧
Dec 02 Javascript
微信小程序 swiper组件轮播图详解及实例
Nov 16 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
vue.js 微信支付前端代码分享
Feb 10 Javascript
原生js实现拖拽功能基本思路详解
Apr 18 Javascript
node 解析图片二维码的内容代码实例
Sep 11 Javascript
jQuery实现简单聊天室
Feb 08 jQuery
node运行js获得输出的三种方式示例详解
Jul 02 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
Jul 22 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
Oct 25 #Javascript
js插件实现图片滑动验证码
Sep 29 #Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
Oct 25 #Javascript
详解JSONObject和JSONArray区别及基本用法
Oct 25 #Javascript
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 #Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
Oct 25 #Javascript
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 #Javascript
You might like
上海无线电三厂简史修改版
2021/03/01 无线电
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
Safari5中alert的无限循环BUG
2011/04/07 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
Python常见的pandas用法demo示例
2019/03/16 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
Java基础类库面试题
2013/09/04 面试题
办理暂住证介绍信
2014/01/11 职场文书
教师个人鉴定材料
2014/02/08 职场文书
生日宴会主持词
2014/03/20 职场文书
平面设计专业求职信
2014/08/09 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
用JS写一个发布订阅模式
2021/11/07 Javascript
golang使用map实现去除重复数组
2022/04/14 Golang