为什么要做 Rubick

其实做 Rubick 1.x 的初衷就是解决自己的问题的:特别需要一款支持自定义插件的桌面端应用来简化使用者安装庞大桌面端应用的臃肿。而且涉及到数据安全的问题,插件只能在公司内网贡献,无法对外公开。

Rubick 2.0 的阶段,重新设计了一套基于 npm 的插件管理体系,让开发者更加便利的加入插件的开发。拓展了插件的边界和种类,开发者可以开发 Rubick 系统插件,此时的 Rubick 就成了一个 electron 高级封装,开发者可以高自由的实现系统能力而不局限余 openAPI 也不局限于必须搜索呼起使用,只要 Rubick 在运行,插件就在运行。

Rubick 的自我介绍

Rubick 是基于 electron 的开源工具箱,基于 npm 插件管理的方式自由集成丰富插件。Rubick(拉比克) 出处是 dota 里面的英雄之一,其核心技能是插件化使用其他英雄的技能,用完即走。非常符合本工具的设计理念,所以取名 Rubick

核心技能展示

1. 基于 npm 的方式管理插件

刚开始设计插件管理的方式是将插件打包成 .zip 的压缩包,然后再将压缩包上传到 CDN 上,点击安装再 download 下来进行解压。但是这样有几个弊端

  1. 需要一个数据存储服务器,来存储这些压缩包文件,那么这需要一笔费用,这对于一个开源开发者来说很难维持下去。
  2. 打包机制和解压机制繁琐,对开发者不友好

直到我看到 PicGo 作者关于 PicGo 插件设计思路的文章,我突然觉得基于 npm 的包管理方式不正是我想要的吗,既轻量有省了一笔服务器存储开销: PicGo 插件设计 但这其实也有另一个问题,因为是基于 npm 的管理模式,所以需要开发者提前安装 node 环境,才可以使用 npm。但这在目前是可以接受的,因为 Rubick 的目前定位也是为开发者服务的开源工具箱。

当你点安装插件的时候,其实执行的就是 npm install xxx.

2. 系统插件能力

Rubick 另一个最大的能力就是支持系统插件,有了系统插件,我们就可以不用受限于必须搜索使用插件了,只要 rubick 在运行,插件就在运行。这对于一些特殊的场景来说是非常有价值的事情,比如我要实现一个定时提醒喝水的插件,如果我退出了插件界面,可能就无法实现。但是要做成了系统插件,即使退出了插件,但rubick依旧会在后台运行插件提供的hooks。这个灵感也是来自于 PicGo 的插件生命周期设计。下面来演示系统插件:

有了系统插件,我们就可以实现 屏幕取色插件定时提醒插件超级面板插件... 另外,由于 rubick 的系统插件是运行在 main 进程的,所以,我们可以通过系统插件做到更多的能力,比如把 rubick 就看出是 electron 的二次封装,不需要任何 electron 的构建打包,基于系统插件,我们可以实现另一个桌面端应用!

最后

做开源最大的动力是因为热爱,完全是非盈利的,希望做的东西能给需要的小伙伴提供一些帮助和方向,程序员都是最单纯可爱的,希望不要恶意攻击打破程开源动力最后一份热衷。

另附:

rubick github 仓库

rubick 使用文档

基于 Electron 的 Rubick 2.4k star 啦,同步更新新功能!的更多相关文章

  1. 基于 Electron 实现 uTools 的超级面板

    前言 为了进一步提高开发工作效率,最近我们基于 electron 开发了一款媲美 uTools 的开源工具箱 rubick.该工具箱不仅仅开源,最重要的是可以使用 uTools 生态内所有开源插件!这 ...

  2. 基于 electron 实现简单易用的抓包、mock 工具

    背景 经常我们要去看一些页面所发出的请求时,经常会用到 Charles 做为抓包工具来进行接口抓取,但一方面市面是很多抓包工具都是收费或者无法二次开发的.当前我们团队大多数用的也都是 Charles, ...

  3. 使用Squirrel创建基于Electron开发的Windows 应用安装包

    我们把自己开发的Electron应用发布之前,需要把app打包成简单的安装包,这样app更容易被获取,以此来发布我们的应用.我们可以参考Wix或其他的安装程序,但是对于Electron应用更好的打包程 ...

  4. 基于 Electron 的爬虫框架 Nightmare

    作者:William 本文为原创文章,转载请注明作者及出处 Electron 可以让你使用纯 JavaScript 调用 Chrome 丰富的原生的接口来创造桌面应用.你可以把它看作一个专注于桌面应用 ...

  5. 基于electron+vue+element构建项目模板之【自定义标题栏&右键菜单项篇】

    1.概述 开发平台OS:windows 开发平台IDE:vs code 本篇章将介绍自定义标题栏和右键菜单项,基于electron现有版本安全性的建议,此次的改造中主进程和渲染进程彼此语境隔离,通过预 ...

  6. 基于electron+vue+element构建项目模板之【改造项目篇】

    1.概述 开发平台OS:windows 开发平台IDE:vs code 上一篇中已完成了electron-vue项目的创建,本篇章中则介绍在此项目基础上进行取消devtools的安装.项目结构的改造. ...

  7. 基于.NetCore开发博客项目 StarBlog - (13) 加入友情链接功能

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  8. 基于Metronic的Bootstrap开发框架经验总结(8)--框架功能总体界面介绍

    在前面介绍了一系列的<基于Metronic的Bootstrap开发框架经验总结>的随笔文章,随笔主要是介绍各个知识点的内容,对框架的总体性界面没有很好的阐述,本篇随笔主要介绍这个Boots ...

  9. Electron应用使用electron-builder配合electron-updater实现自动更新(windows + mac)

    发客户端一定要做的就是自动更新模块,否则每次版本升级都是一个头疼的事.下面是Electron应用使用electron-builder配合electron-updater实现自动更新的解决方案. 1.安 ...

随机推荐

  1. Hadoop、Hive【LZO压缩配置和使用】

    目录 一.编译 二.相关配置 三.为LZO文件创建索引 四.Hive为LZO文件建立索引 1.hive创建的lzo压缩的分区表 2.给.lzo压缩文件建立索引index 3.读取Lzo文件的注意事项( ...

  2. org.apache.hadoop.hive.ql.metadata.HiveException: Internal Error: cannot generate all output rows for a Partition解决

    自己在路径访问明细表开发时,写的sql如下 SELECT guid, sessionid, event['url'] as page, `timestamp` as ts, row_number() ...

  3. 商业爬虫学习笔记day8-------json的使用

    一. 简介 JSON,全称为JavaScript Object Notation(JavaScript对象标记),它通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式.它基于 ECMAScri ...

  4. supervise安装与使用

    确认当前是否已经安装which supervise/usr/local/bin/supervise 软件下载安装-------------------------------------------- ...

  5. 一文读懂RESTful架构

    转载自https://zhuanlan.zhihu.com/p/381554129 RESTful架构究竟是什么 别着急,想要了解RESTful,我们先来了解一位大佬Roy Thomas Fieldi ...

  6. springboot-MVC 过滤器使用

    一.前言 一下代码以SSO用户登录列子代码.完整代码https://gitee.com/xuxueli0323/xxl-sso 二.使用 2.1 创建过滤器 创建一个过滤器,实现Filter 接口 p ...

  7. ClassLoader.loadClass()与Class.forName()的区别《 转》

    ClassLoader.loadClass()与Class.forName()区别: ClassLoader.loadClass()与Class.forName()大家都知道是反射用来构造类的方法,但 ...

  8. [特征工程] GBDT

  9. C# .exe和.dll文件图标资源提取工具

    Windows 可执行文件(.exe)和动态库文件(.dll)图标资源提取工具 GitHub 功能 图标资源预览 图标资源导出(仅支持导出 PNG 格式) 代码 获取图标资源使用了 Win32 API ...

  10. Excel如何使用VLOOKUP函数多条件匹配查找数据

    一.对应源数据如sheet6所示,对应需查找的数据如sheet7所示 二.在sheet6中添加一列辅助列 三.在sheet7对应位置插入vlookup函数 四.最终结果如下图所示