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...

相关推荐
ze_juejin14 分钟前
Fetch API 详解
前端
用户669820611298222 分钟前
js今日理解 blob和arrayBuffer 二进制数据
前端·javascript
想想肿子会怎么做25 分钟前
Flutter 环境安装
前端·flutter
断竿散人25 分钟前
Node 版本管理工具全指南
前端·node.js
转转技术团队26 分钟前
「快递包裹」视角详解OSI七层模型
前端·面试
1024小神31 分钟前
Ant Design这个日期选择组件最大值最小值的坑
前端·javascript
卸任32 分钟前
Electron自制翻译工具:自动更新
前端·react.js·electron
安禅不必须山水34 分钟前
Express+Vercel+Github部署自己的Mock服务
前端
哈撒Ki36 分钟前
快速入门zod4
前端·node.js
用户游民1 小时前
Flutter 项目热更新方案对比与实现指南
前端