话不多说,先放上截图和仓库地址:

代码仓库:github

故事背景

网上购物优惠券 www.cqfenfa.com

网络抓包

之前公司内部因为开发需要,需要和后端进行接口联调,测试环境的时候,经常会涉及到一些状态改变要看交互样式的问题。比如测试需要测商品的待支付、支付中、支付完成等各种节点的交互样式是否符合预期,这种情况测试一般会去造数据或者让后端改数据库接口。 有的小伙伴可能会用 Charles 修改返回数据进行测试。但是 Charles 的抓包体验和配置体验感觉有点麻烦,不是很友好,所以我们自己做了个抓包&mock工具:

傻瓜式交互一次性解决:抓包、代理、请求转发、接口数据篡改 mock 、跨域访问 等能力,并得到了广泛使用和好评。

文件上传

随着项目开发的继续,有些用户给我们反馈页面加载图片资源比较慢,我们看了一下很多图片资源都没有经过压缩处理,这个时候我们可以通过 webpack 写了一些 loader 来对图片资源进行压缩处理。这个时候我们的图片资源大部分是存放在项目目录下。而有的时候,我们是需要将图片存放于 cdn 上的,此时我们又需要一个图床工具,可以在线存储图片资源。于是乎,我们又整合了图片压缩和上传的功能,做了个图床工具:

性能测评

开发者开发页面的时候,需要对页面的性能进行评估,另一方面也可以把评估报告通知给测试同学,对其进行性能测试。之前大多采用的是 chrome 插件 lighthouse 来做。但是这个东西对未登录用户无法做到性能评估,因为用户未登录直接测评了登录页面,显然不符合预期,其次,每个电脑上都得安装插件,受限于设备的不同,可能会导致性能没有同一的变量(网络、网速、分辨率、CUP 等)。所以我们基于 pupeeteer-core 以及electron 做了一个免登的测评工具:

但是这些还远远不够,我们随着业务的增加,功能愈发的多了起来:我们的埋点检测工具、需求管理工具、前端多环境切换工具 等等等....一方面导致 electron 体积变得臃肿起来,另一方面随着发布频率增加,安装下载的成本也越来越大,很多用户就不愿意再接着安装,因为确实很麻烦。所以我们需要改变,让功能不依赖与容器。这就需要把我们的功能全部独立出去,做成插件化。所以我注意到了 utools

插件化之旅

一开始想到做插件化,无非就是使用 electron 的 webview 能力,实现类似于原生内嵌h5那样的方式,h5 页面可以做独立发布,原生提供 nativaAPI 之间通过 jsBridge 来桥接调用原生的方法。这样实现并无问题,我们也尝试了做了一次。最终思路大概是:

electron webview 方式

1. electron 中使用 webview

<webview src="https://xxx.xx.com/index.html" preload="preload.js" />

2. 实现 bridge

// preload.js
window.rubickBridge = {sayHello() {console.log('hello world')}
}

3. 插件借助 bridge 调用 electron 的能力

<html><body><div>这是一个插件<div></body><script>window.rubickBridge.sayHello()
</script>
</html>

4. 通信

因为 proload.js 是 electron 的 renderer 进程的,所以如果需要使用部分 main 进程的能力,则需要使用通信机制:

// main process
ipcMain.on('msg-trigger', async (event, arg) => {const window = arg.winId ? BrowserWindow.fromId(arg.winId) : mainWindowconst operators = arg.type.split('.');let fn = Api;operators.forEach((op) => {fn = fn[op];});const data = await fn(arg, window);event.sender.send(`msg-back-${arg.type}`, data);
});// renderer process
ipcRenderer.send('msg-trigger', {type: 'getPath',name,
});
ipcRenderer.on(`msg-back-getPath`, (e, result) => {console.log(result)
});

为什么后来我们又放弃了这条路

开源版本的 uTools。可支持 uTools 所有插件生态相关推荐

  1. 开源版本_重磅!阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell

    3 月 21 日北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell.作为 Java 全球管理组织 Java Community Process ...

  2. 热议:这样的开源项目,你会支持吗?

    来源:https://zhuanlan.zhihu.com/p/478412327 今天无聊刷GitHub看到一个让我血压上来的项目 乍一看,2.4k star,应该不像是什么小项目应该是比较有用的项 ...

  3. PyCharm 3.0 发布,提供免费开源版本

    PyCharm 发布最新的 3.0 版本,该版本新特性详见: http://www.jetbrains.com/pycharm/whatsnew/index.html 该版本最主要的是提供了免费开源的 ...

  4. CYQ.Data 数据框架 V4.0 开源版本发布(源码提供下载,秋色园V2.5版本标配框架)

    说明的说明: 博客园团队两次移此文出首页,说 这篇文章不属于知识分享型文章,并且有广告嫌疑. 本文的确属于分享型文章,而且分享的知识点比其它文章都多很多,看看网友回复"谢谢分享"就 ...

  5. 腾讯宣布开源 RoP:Apache Pulsar 支持原生 RocketMQ 协议

    作者 | 冉小龙,刘昱 RocketMQ 用户可以无缝迁移到 Apache Pulsar 了.自此,Apache Pulsar 补齐了兼容主流消息队列协议的能力. 我们很高兴地宣布腾讯云中间件开源 R ...

  6. JEECG 商业版本和开源版本有什么区别呢?

    好纠结啊,JEECG 商业版本和开源版本有什么区别呢? 小J博士来给你解答: 商业版本独有功能: 1.流程设计器 2.集成工作流引擎activit,智能化封装,在线配置表单,在线设计流程,流程和表单挂 ...

  7. 好纠结啊,JeeWx商业版本和开源版本有什么区别呢?

    好纠结啊,JeeWx商业版本和开源版本有什么区别呢? JeeWx开源版本是一套基础微信开发平台,有基础的微信菜单.素材管理.微信对接等基础功能,适合于开发者学习研究. JeeWx商业版本是一套成熟的微 ...

  8. 2022最新oneNav导航系统源码全开源版本下载总裁导航

    介绍 2022最新导航系统源码全开源版本下载 导航系统2022最新开源版,所有文件均已开源,用户可自行更改二开,没有授权代码 没有后门 用户可自行D盾扫描,响应式布局,支持搜索框弹窗,支持暗夜模式,文 ...

  9. 域名授权验证系统v1.0.6开源版本网站源码

    介绍: 域名授权验证系统v1.0.6公益开源版本网站源码几乎所有的程序都能整合使用,包括您的app和计算机程序,支持多程序授权.在线支付.权限分配.内测用户.在线升级.商业广告.工单系统.盗版管理.自 ...

  10. utools沙拉查词插件 | windows划词翻译

    Utools 先下载utools 然后下载插件 沙拉查词-utools移植版本 下载地址 或者去github下载 https://github.com/anrgct/utools-saladict . ...

最新文章

  1. 无穷级数求和7个公式_亿图在线公式编辑器使用方法入门篇
  2. springboot集成邮箱功能
  3. 类和对象运行时在内存里是怎么样的?各种变量、方法在运行时是怎么交互的?
  4. IBM 安全部门 CTO:AI 必须被重新定义为“增强智能”
  5. [原]Java程序员的JavaScript学习笔记(7——jQuery基本机制)
  6. SpringBoot重复配置数据库导致Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  7. web网页上面调用qq
  8. java ArrayList集合
  9. C# 文件读写系列二
  10. 太极发送卡片软件_太极APP的入门级使用方法
  11. android游戏开发学习笔之九 (学习书籍 Android游戏编程之从零开始)
  12. 少儿编程家长疑问解答
  13. Skyline软件二次开发初级——11如何在WEB页面中的三维地图上加载和保存工程文件...
  14. U盘因为有写保护,不能格式化,该怎么办
  15. 转linux时间格式,Linux命令之date - 显示、修改系统日期时间[转]
  16. python怎么编写口算题_用Python开发小学二年级口算自动出题程序
  17. 如何查找SCI期刊的缩写
  18. Python简单实现人脸识别检测, 对某平台美女主播照片进行评分排名
  19. 阿里新零售中的智能补货(I)— 库存模型
  20. 李开复写给中国大学生的第五封信

热门文章

  1. strerror函数使用
  2. 3D Hashin(纤维失效)+Puck(基体失效)渐进损伤失效准则
  3. 关于JavaScript与MySQL学习小结
  4. python情感分析语料库_python 中文情感分析 Snownlp库的使用
  5. macOS Mojave(软件篇):Google Chrome for Mac 右键失效问题
  6. 读《 江西59岁老人用鼠药结束了妻子性命》有感
  7. UBuntu16.04中文语言环境下 把文件夹中文名字改为英文
  8. 如何减少项目在Corona和V-Ray中的3ds Max渲染时间?
  9. 高等光学仿真 (matlab版) 百度云,高等光学仿真(MATLAB版):光波导•激光
  10. 滚动条css圆角兼容ie,ie浏览器滚动条样式修改