位置: IT常识 - 正文

WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)(跨平台桌面程序)

编辑:rootadmin
WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails) 楔子

推荐整理分享WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)(跨平台桌面程序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:.net跨平台桌面,跨平台桌面应用开发框架,开发跨平台桌面应用程序,跨平台桌面应用开发框架,跨平台桌面程序开发,跨平台桌面程序,开发跨平台桌面应用程序,跨平台桌面程序,内容如对您有帮助,希望把文章链接给更多的朋友!

WEB 跨平台 桌面应用程序 顾名思义就是用 JavaScript、HTML、CSS 等前端技术构建跨平台的桌面应用,WEB 负责 GUI 渲染并与后端(如 Node.js、Python、Rust 等)交互,从而突破自身无法操作 OS 层级资源的限制。其实现在如火如荼的小程序原理也类似,只是把后端换成宿主 APP (如微信、支付宝、飞书、钉钉等)。

我大约在 2013 年开始基于 WEB 做一些简单的桌面应用,因为对 WEB 熟又有现成的资源,通过包装即可快速生成桌面应用(exe 可执行文件)分享出去。

最开始用的是 C# + webview 控件做了一款信息管理系统(WinForm 做登录界面,用户授权成功后创建 WebView 对象加载远程网址),兼容性跟效果在当时都非常理想。后来也用过 Android 下的 WebView,大同小异。

WebView 下 JS 与后端原生代码的交互基于 JSBridge,对于该项技术的详解,推荐看下:

一文让你彻底理解JSBridge微信小程序渲染层与逻辑层独立 及JsBridge原理分析工具总览

此类构建工具有很多,这里比较的是 Electron、Tauri、Wails 2 三款

工具原生语言最新版本简介ElectronNode.js21.0.1使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架(嵌入 Chromium 和 Node.js 到 二进制文件)TauriRust1.2Tauri 是一款应用构建工具包,让您能够为使用 Web 技术构建跨平台的快速、安全、前端隔离应用wailsGo2.1.0使用 Go + HTML + CSS + JS 构建漂亮的跨平台桌面应用

Electron算是业内老大哥,最开始的名字叫做 atom-shell(是 GitHub 随 Atom 一起开源的跨操作系统开发桌面应用的框架),最早的版本 0.3.1 发布于 2013 年 8 月, 在 2015 年 4 月分布的 0.24.0 版本更名为 electron(我也是这时开始接触),到最新发布的 21.2.2 版本 ,版本迭代真的是飞一般😄。

Tauri是赛道的后起之秀,基于专注安全跟性能的 Rust + 操作系统原生 web 渲染引擎(windows 下为 WebView2),这一点跟 electron 不同,所以前者打包后体积非常小。Tauri 在 2019 年发布,势头迅猛(目前在 github 上已经有 53.8k 的 star)。

wails在 2022 年 9 月发布 2.0.0 正式版,渲染模式跟 tauri 一样。

集成方式

构建工具请参照官网进行预先安装(如果资源下载缓慢可以考虑更换国内源),本文在 windows 平台下进行

此处用 vue3-naive-starter(VUE3 + Naive UI + Tailwind CSS + WebPack5 的快速开发框架) 作为 UI 进行集成演示。

设备配置如下

NameValue处理器Intel® Core™ i5-11300H @ 3.10GHzRAM16.0 GB操作系统Windows 11 家庭中文版(64位)Node.jsv16.13.0

Electron

使用 vue-cli-plugin-electron-builder 插件,由于官方文档还是 2.1.1 版本的(不支持 14.x 版本以上的 electron),所以这里手动集成

安装依赖:npm i -D electron vue-cli-plugin-electron-builder@3.0.0-alpha.4新建src-electron目录并新建index.js文件import { app, protocol, BrowserWindow } from 'electron'import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'protocol.registerSchemesAsPrivileged([ { scheme: 'app', privileges: { secure: true, standard: true } }])async function createWindow() { let devTool = !process.env.IS_TEST const win = new BrowserWindow({ width: 1280, height: 780 + (devTool ? 100 : 0), webPreferences: { nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION, contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION } }) if (process.env.WEBPACK_DEV_SERVER_URL) { await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL) if (devTool) win.webContents.openDevTools() } else { createProtocol('app') win.loadURL('app://./index.html') }}app.on('window-all-closed', () => {if (process.platform !== 'darwin') app.quit()})app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) createWindow()})app.on('ready', async ()=> createWindow())配置vue.config.js下 electron 相关的参数pluginOptions: { electronBuilder: { outputDir: "dist", nodeIntegration: true, mainProcessFile: "./src-electron/index.js", builderOptions: { appId: "vue3-naive-starter", /** * 打包后文件名 * 默认为:${productName}-${version}.${ext} * 详见 https://www.electron.build/file-patterns#file-macros */ artifactName: "${productName}.${ext}", //win相关配置 win: { target: [ { //不进行安装文件制作,仅压缩. 7z 比 zip 具有更高的压缩比 target: "7z", /* 架构可选值:"arm64" | "armv7l" | "ia32" | "universal" | "x64" 构建时,会下载对应的 electron 发行版,保存地址在 C:\Users\{用户名}\AppData\Local\electron\Cache 如果下载慢,可以手动从 https://registry.npmmirror.com/binary.html?path=electron/ 下载放置在指定位置 */ arch: ["ia32"] } ] } } }}新增脚本入口// package.json 下 scripts 节点"electron:build": "vue-cli-service electron:build","electron:serve": "vue-cli-service electron:serve",启动npm run electron:serve,效果如下图 Tauri

使用插件 vue-cli-plugin-tauri

安装 cargo(建议配置环境变量 CARGO_HOME)、Rust 环境安装插件:vue add tauri (按照提示选择即可)

完成后,可以看到新建了src-tauri目录 这里需要注意下,src-tauri\tauri.conf.json 文件下有两个配置beforeBuildCommand、beforeDevCommand,建议都设置为空

启动 npm run tauri:serve

注意:

第一次会下载各种依赖,时间较久,请耐心等待仅支持 windows 7 以上的操作系统。如果本机没有 webview2 环境(通常新版本的 windows 10/11 会自带,或者自行安装过新版本的 Edge 浏览器也会有),请参考下文 附录/安装 WebView2 章节

wails

安装 go 环境(配置国内源 go env -w GOPROXY=https://goproxy.cn,direct)安装 wails go install github.com/wailsapp/wails/v2/cmd/wails@latest检验安装结果wails doctor(显示 Wails CLI v2.1.0 字样)创建项目wails init -n vue3-naive-starter-wails -t vue 将代码复制到frontend目录下执行wails dev即可启动打包

前端资源打包后原始大小 4.3M(ZIP 压缩后 1.3M)

WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)(跨平台桌面程序)

electron

执行命令npm run electron:build等待完成(第一次打包会下载响应的依赖包,请耐心等待, 当看到DONE Build complete! Done in 124.57s. 字样表示完成)查看dist目录下的结果,压缩包大小为57M

这里有个题外话,打包后查看bundled目录下有package.json文件,就是说在运行时可以读取到该文件。

tauri

【可选】 修改src-tauri\tauri.conf.json的tauri->bundle->active值为 false (即不生成安装包,没必要)执行命令npm run tauri:build结果文件保存在src-tauri/target下,exe 文件大小为4.8M# 请事先修改 identifier 的值,否则会看到如下的报错信息Error You must change the bundle identifier in `tauri.conf.json > tauri > bundle > identifier`. The default value `com.tauri.dev` is not allowed as it must be unique across applications.

wails

执行wails build查看build/bin下的 exe 文件(大小为 12.5M)运行时

让我们分别运行三个exe,可以看到打开速度都非常迅速,肉眼看不出差别。 此时资源占用情况如下 切换到图标汇总页面,该页面下循环渲染 1600+ 个图标,再看看资源占用情况(可以看到内存占用均翻倍了) 目前来看,electron 占用的资源相对少些(子任务数也少),而tauri、wails由于机制几乎一样资源占用也相差无几。

结语

本次浅显对比了简单 web 应用的打包,没有涉及到后端的原生计算、交互等,仅供参考。

如何选择

三款工具表现都不错,大家根据自身情况(如技术栈、团队人员、终端平台等)进行选择即可。

我个人(对 Rust、Go 都不熟悉 😸)的话会以项目特点为主进行选择:

项目特点首选备选说明纯粹给原有 WEB 项目加一个原生应用的外壳tauriwails操作简单、没有额外的学习成本、社区资源也算完备功能复杂,需要与 OS 交互electrontaurielectron 社区庞大、文档/接口完备,第三方库也全Q&A

以下内容仅针对tauri、wails打包后运行不成功,因为electron内嵌了Chromium在各个平台下保持了很好的统一性

💔 程序闪退

打包后的 exe ,双击后屏幕一闪,程序自动退出

碰到这种情况,请检查操作系统是否安装有WebView2 控件。

① windows 10/11 如何查看?

右键 🪟 选择应用与功能,在应用列表中检索关键字

② windows 7 如何查看?

打开控制面板,单击程序选项,然后再单击程序和功能选项,就可以打开 win7 的应用程序管理器窗口。通过该窗口可以查看和管理系统中已经安装的程序。

✈️ 安装 WebView2

前往下载 WebView2 运行时安装程序

根据操作系统选择合适的版本

安装下载的文件(按照默认选项即可)

完成后再次运行本程序,Enjoy 😄

🈚 DLL 缺失

若出现下图所示的错误信息

请将目录下的vcruntime140_1.dll复制到C:\Windows\System32下即可。

该 DLL 文件可在以下网站下载:

DLL‑files.comVisual C++ Redistributable for Visual Studio 2015Microsoft Visual C++ Redistributable
本文链接地址:https://www.jiuchutong.com/zhishi/283806.html 转载请保留说明!

上一篇:若依框架图片上传、富文本框编辑器功能(若依框架讲解)

下一篇:最高薪的IT公司CEO是谁(it最高工资)

  • 好的运营,应该有这两种思维方式(做好运营最重要的是什么呢?)

    好的运营,应该有这两种思维方式(做好运营最重要的是什么呢?)

  • iPhonex可以反向充电吗(iphonex反向充电)

    iPhonex可以反向充电吗(iphonex反向充电)

  • 微信交话费能打发票吗(微信上交话费可以打发票吗)

    微信交话费能打发票吗(微信上交话费可以打发票吗)

  • 电脑黑屏显示检查电缆接口(电脑黑屏显示检测信号线HDMI)

    电脑黑屏显示检查电缆接口(电脑黑屏显示检测信号线HDMI)

  • oppo手机出现绿色框锁定(oppo手机出现绿色线条怎么办)

    oppo手机出现绿色框锁定(oppo手机出现绿色线条怎么办)

  • 抖音可以不让某个人看吗(抖音可以不让某个人看我直播吗)

    抖音可以不让某个人看吗(抖音可以不让某个人看我直播吗)

  • 110405抖音登录错误代码是啥意思(抖音登录错误)

    110405抖音登录错误代码是啥意思(抖音登录错误)

  • CAD线段合并不了是因为什么(cad怎么把图形合并)

    CAD线段合并不了是因为什么(cad怎么把图形合并)

  • 钉钉退群有提示信息吗(钉钉退群为什么还会有显示)

    钉钉退群有提示信息吗(钉钉退群为什么还会有显示)

  • 苹果7加减音量键失灵(苹果加减音量键上面那个是什么)

    苹果7加减音量键失灵(苹果加减音量键上面那个是什么)

  • 打印机老打偏怎么回事(打印机老是打偏)

    打印机老打偏怎么回事(打印机老是打偏)

  • 为什么视频接不了(为什么接不了视频聊天)

    为什么视频接不了(为什么接不了视频聊天)

  • opppa11跟oppoa11x区别(oppoa11与oppoa11x哪个好)

    opppa11跟oppoa11x区别(oppoa11与oppoa11x哪个好)

  • 怎样关闭微信的刷脸功能(怎样关闭微信的自动扣费功能)

    怎样关闭微信的刷脸功能(怎样关闭微信的自动扣费功能)

  • 浏览公众号对方知道吗(浏览公众号对方会知道吗)

    浏览公众号对方知道吗(浏览公众号对方会知道吗)

  • 手机连不起wifi怎么办(手机连不起wifi老是显示连接超时怎么回事)

    手机连不起wifi怎么办(手机连不起wifi老是显示连接超时怎么回事)

  • oppo手机上面的hd怎么关(oppo手机上面的圆圈怎么去掉)

    oppo手机上面的hd怎么关(oppo手机上面的圆圈怎么去掉)

  • 质量中ods是什么意思(质量ooc是什么意思)

    质量中ods是什么意思(质量ooc是什么意思)

  • 抖音拉黑后能看作品吗(抖音拉黑后能看到对方的关注粉丝吗)

    抖音拉黑后能看作品吗(抖音拉黑后能看到对方的关注粉丝吗)

  • 华为mate30pro几时上市(华为mate30pro多久会降价)

    华为mate30pro几时上市(华为mate30pro多久会降价)

  • xs max使用攻略(xs max使用技巧)

    xs max使用攻略(xs max使用技巧)

  • win10如何修改硬盘格式(win10怎么改硬盘)

    win10如何修改硬盘格式(win10怎么改硬盘)

  • 小米6有语音助手吗(小米6x语音助手怎么打开)

    小米6有语音助手吗(小米6x语音助手怎么打开)

  • 影响计算机性能的关键部位(影响计算机性能的主要指标有)

    影响计算机性能的关键部位(影响计算机性能的主要指标有)

  • 一头公牛站在皮库山前的田野中,亚速尔群岛皮科岛 (© Atmo-Sphere/Getty Images)(一头公牛和一头母牛,答五个字)

    一头公牛站在皮库山前的田野中,亚速尔群岛皮科岛 (© Atmo-Sphere/Getty Images)(一头公牛和一头母牛,答五个字)

  • 延期申报后可否延期缴纳税款
  • 单位的车辆车船税怎么交
  • 个人所得税计提分录怎么写
  • 红冲上个月发票
  • 关于美容院的会计如何做账
  • 结转销售成本的分录
  • 汇算清缴职工教育费填在
  • 查找出资产负债表的软件
  • 上月做其它应付款本月发票到如何做
  • 对公账户发工资怎么操作
  • 没有社保可以缴费吗
  • 个体户餐饮经营范围全部怎么写
  • 债务清偿如何进行税务处理
  • 或有负债怎么入账
  • 代扣代缴公积金有返还吗
  • 项目部建筑施工筹建期会计账务处理
  • 涉外收入申报单填写模板
  • 工会有纳税号吗
  • 知识产权投资入股要交税吗
  • 购设备发票只开来一部分怎么入账?
  • 户外广告经营总额
  • 低于账面价值出售固定资产时下列哪项会下降
  • 汇兑结算包括
  • 事业单位净资产怎么计算?净资产怎么算
  • win10鼠标在哪
  • 原始股东减持要交多少税
  • 如何免费获得microsoft
  • 向国外个人支付的佣金是否缴纳个人所得税
  • 增加办税人员需要带什么材料
  • 如何申请公积金装修房子
  • lnmgr.exe是什么
  • 如何选购餐桌椅
  • php生成二维码
  • 继续涉入资产会计处理
  • 试用期不交金后面补缴
  • deepwiser怎么用
  • 图像风格迁移网站
  • php post数据
  • php依赖注入的三种方式
  • 信用证支付方式,银行处理单据时主要关注( )
  • 进项发票是专票吗
  • 营业执照更换法人需要哪些手续
  • c 语言 static
  • phpcms添加内容
  • 高并发数据库解决方案
  • sql server 2000数据库不能备份的原因
  • sql2008还原
  • 小规模纳税人个人所得税税率
  • 销售货物如何写凭证
  • 长期股权投资与其他权益工具投资的区别
  • 长期待摊费用做账
  • 营业税金及附加和税金及附加有什么区别
  • 给员工缴纳的雇工保险
  • 物业公司收物业费不开发票违法吗
  • 多交税款账务怎么处理
  • 存货周转次数越高好还是越低好
  • 企业银行贷款保证金多少
  • 公司注销其他应收款余额要交税吗
  • 印花税退还
  • 存出投资款会计处理
  • 全资子公司合并报表编制
  • win10预览版21277
  • windows命令行使用
  • 使用命令行 -devmode
  • mac截屏后的图片在哪里
  • 监控iphone软件
  • win10升级准备就绪需要多久
  • linux服务器dns配置安装
  • div垂直居中怎么设置css
  • 一键修复ie
  • cocos2dx官方教程
  • javascript 函数定义
  • 批处理设置dns
  • node.js 流
  • nodejs quic
  • node-js
  • 半透明图层怎么制作
  • 国家税务总局河南省税务平台
  • 减免税的三种方式
  • 资源税是什么?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设