MixOne - 绕开Electron的IPC,高效开发Electron桌面应用的工具推荐

简介

MixOne是开发桌面应用(Win、Mac、Linux)和浏览器Web的一款工具、其基于Vite实现,编译electron代码和build浏览器web。其拥有简单的工程结构。熟悉前端开发的程序员可以很轻松的开发出桌面应用,它比electron的其他框架更简单,因为无需关心Electron的IPC通讯代码,在任意位置写mixone的语法糖(以Main、NodeJS、PJS开头)即可访问原生功能。可以说是在开发阶段"绕靠"IPC。MixOne也能打包BS架构的web产物,它以多html页面入口+SPA模式兼容存在,使用它可以很好的对大型项目进行微前端进行设计和部署。

一、 Mixone在开发桌面应用的主要特点

1、通过语法糖和注释在开发阶段绕开繁琐的IPC代码。

a. 以Main、NodeJS、PJS开始访问 electron的API和nodeJS包和插件(Plugin JS)。

ini 复制代码
比如:let path = await Main.app.getPath('documents');

​编辑

b. 以注释方式把函数(箭头函数)变主进程代码。以"// @mainProcess"进行注释,如图。

​编辑以上两种方式都可以写在

语法糖是简短代码,涉及的变量以调用的函数传递到方法中。注释模式也是以函数为单位,所以内部涉及的变量一定要以参数传递给函数。

被注释为主进程代码的函数不能跨作用域调用,内部的变量只能是在当前作用域中定义的,否则编译到主进程时候会找不到变量。

2、 精简的目录结构。

直观又容易理解,没有任何冗余目录层级。为什么我能做到这么科学的工程结构,请继续关注MixOne的发展,以后为各位讲解!

编辑

编辑

3、多窗口管理和通讯。

MixOne工具支持编译以window.WindowManager.xxx访问来管理窗口的创建、关闭和监听窗口事件。以及向指定窗口发送消息,向所有窗口发送广播。

例如:打开新窗口,以/windows/为根窗口目录打开"/help-window/"。还可以指定窗口参数。

ini 复制代码
let winInfo = await window.windowManager.openWindow('/help-window/', {
  width: 1200,
  height: 900
});

关于窗口管理类的用法,请继续关注MixOne后续出的文档。

二、 MixOne的快速安装。

请确保你已经安装了nodejs。建议v20及以上的版本。

项目创建命令:

npm install mixone -g

//创建项目

mixone create mixone-demo1

cd mixone-demo1

npm install //安装依赖 或 yarn

npm run dev

npm run build:win //打包window的exe,最小61M,以后有望优化到18M起。

创建项目中有一些简单的例子,比如窗口管理tab下的最大化、最小化等。但这只是MixOne功能的冰山一角,你要真正的使用MixOne开发一个桌面项目,你需要认证查看文档和github上的例子仓库,github上只是例子仓库,你可以例子中学习到如何使用MixOne

github.com/qew4/mixone...

三、 对开发的效率提升

我们从读取文件的例子来看MixOne对于效率的提升有多大?

csharp 复制代码
const fileContentResult = await NodeJS.fs.readFileSync("D:/file/123.txt", 'utf8')

​编辑

从以上图中的对比来看去IPC代码后的优点:

1、 代码量只有原来的 五分之一不到;

2、 书写的位置只要是script标签内即可,而无需区分主进程和渲染京城,光这一点就避免了开发者来回切换目录和文件。

3、不用考虑事件监听应该怎么取名和放在什么位置。这也就为开发者省心,MixOne会去处理这些问题。

4、在书写位置的上下文业务逻辑实现没有受到打扰(去设计IPC而打扰),审查代码也对代码的目的和功能比较直观。

四、 为什么它叫MixOne

顾名思义,MixOne就是混合卸载一个地方的意思,把主进程API、Node调用、主进程插件都写在渲染进程,混合在一起,所以叫MixOne

五、 安全性

MixOne框架是一个编译型的工具,它遵照官方的安全机制去编译,渲染进程无需启用Node功能,所有的原生功能(访问Node和Electron的API)都从预加载中暴露。

MixOne工具的官方地址:
www.npmjs.com/package/mix...

相关推荐
小彭努力中11 小时前
1.在 Vue 3 中使用 Cesium 快速展示三维地球
前端·javascript·vue.js·#地图开发·#cesium·#vue3
一字白首11 小时前
Vue3 进阶,新特性 defineOptions/defineModel+Pinia 状态管理全解析
前端·javascript·vue.js
90后的晨仔11 小时前
🛠️ 为什么配置 ~/.ssh/config 后,Sourcetree 就能正常推送了?
前端
Sylus_sui11 小时前
Vue2 与 Vue3 数据双向绑定:区别与原理详解
前端·javascript·vue.js
ConardLi11 小时前
AI:我裂开了!现在的大模型评测究竟有多变态?
前端·人工智能·后端
这是你的玩具车吗12 小时前
能和爸妈讲明白的大模型原理
前端·人工智能·机器学习
霍理迪12 小时前
CSS文本样式
前端·css
Ashley_Amanda12 小时前
JavaScript 中 JSON 的处理方法
前端·javascript·json
烛阴12 小时前
C# 正则表达式(3):分组与捕获——从子串提取到命名分组
前端·正则表达式·c#
eason_fan13 小时前
从一则内存快照看iframe泄漏:活跃与Detached状态的回收差异
前端·性能优化