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

这篇具有很好参考价值的文章主要介绍了WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

楔子

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,对于该项技术的详解,推荐看下:

工具总览

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

工具 原生语言 最新版本 简介
Electron Node.js 21.0.1 使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架(嵌入 Chromium 和 Node.js 到 二进制文件)
Tauri Rust 1.2 Tauri 是一款应用构建工具包,让您能够为使用 Web 技术构建跨平台的快速、安全、前端隔离应用
wails Go 2.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 进行集成演示。

设备配置如下

Name Value
处理器 Intel® Core™ i5-11300H @ 3.10GHz
RAM 16.0 GB
操作系统 Windows 11 家庭中文版(64位)
Node.js v16.13.0

Electron

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

  1. 安装依赖:npm i -D electron vue-cli-plugin-electron-builder@3.0.0-alpha.4
  2. 新建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())
  1. 配置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"]
                    }
                ]
            }
        }
    }
}
  1. 新增脚本入口
// package.json 下 scripts 节点
"electron:build": "vue-cli-service electron:build",
"electron:serve": "vue-cli-service electron:serve",
  1. 启动npm run electron:serve,效果如下图
    WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)
    Tauri

使用插件 vue-cli-plugin-tauri

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

完成后,可以看到新建了src-tauri目录
WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)
这里需要注意下,src-tauri\tauri.conf.json 文件下有两个配置beforeBuildCommandbeforeDevCommand,建议都设置为空

  • 启动 npm run tauri:serve

注意:

  1. 第一次会下载各种依赖,时间较久,请耐心等待
  2. 仅支持 windows 7 以上的操作系统。
  3. 如果本机没有 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
    WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)
  • 将代码复制到frontend目录下
  • 执行wails dev即可启动

打包

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

electron

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

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

tauri

  • 【可选】 修改src-tauri\tauri.conf.jsontauri->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,可以看到打开速度都非常迅速,肉眼看不出差别。
WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)
此时资源占用情况如下
WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)
切换到图标汇总页面,该页面下循环渲染 1600+ 个图标,再看看资源占用情况(可以看到内存占用均翻倍了)
WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)
目前来看,electron 占用的资源相对少些(子任务数也少),而tauriwails由于机制几乎一样资源占用也相差无几。

结语

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

如何选择

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

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

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

Q&A

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

💔 程序闪退

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

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

① windows 10/11 如何查看?

右键 🪟 选择应用与功能,在应用列表中检索关键字
WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)

② windows 7 如何查看?

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

✈️ 安装 WebView2

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

  2. 根据操作系统选择合适的版本
    WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)

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

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

🈚 DLL 缺失

若出现下图所示的错误信息
WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)

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

该 DLL 文件可在以下网站下载:文章来源地址https://www.toymoban.com/news/detail-449403.html

  • DLL‑files.com
  • Visual C++ Redistributable for Visual Studio 2015
  • Microsoft Visual C++ Redistributable

到了这里,关于WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue.js + Electron 的跨平台桌面应用程序开发

    本文介绍了 Vue.js 和 Electron 的基本特点和原理,并分析了它们在桌面应用程序开发中的优势和应用场景。在基于 Vue.js 和 Electron 的桌面应用程序开发实践中,本文详细介绍了项目的搭建和配置,包括环境的准备、项目的初始化和依赖的安装等步骤。然后,本文介绍了使用 Vu

    2024年02月13日
    浏览(52)
  • flutterui构建工具,Java+性能优化+APP开发+NDK+跨平台技术

    面试的时候除了算法题,其他被怼成弟弟,没想到面试官给过了,一天面完三面并且一周之后收到了oc,觉得自己非常的幸运,终于得到了大厂的认可(虽然是颗白菜)。这里建议网友如果有自己亮点的话,还是可以勇敢大胆的尝试一下大厂,毕竟除了实力之外,运气与机遇也占

    2024年03月15日
    浏览(43)
  • .NET / C# 开发 Ubuntu Desktop 跨平台图形界面桌面程序 Avalonia - Visual Studio 安装/创建/运行指南 (一)

    Avalonia 是一个开源的跨平台应用程序框架,用于构建桌面应用程序。它使用 C# 和 XAML 进行开发,可以在 Windows、macOS、iOS、Android 及 Linux 等多个平台上运行。Avalonia 项目地址:https://github.com/AvaloniaUI/Avalonia 本文快速介绍如何入门使用 Avalonia 编写和执行 Ubuntu Desktop 图形界面桌面

    2024年02月01日
    浏览(47)
  • 跨平台桌面应用小记

    不管是出于产品定位、多平台统一亦或是国产化要求。跨平台都是桌面开发都是必须要面对的一个课题,下面简单列举下主流或一些新兴的跨平台方案,以备后续使用。 1、Qt Qt是一个跨平台的C++图形用户界面库,可以部署在Windows、Mac、Linux、嵌入式系统(QNX等)、Android等平

    2024年02月05日
    浏览(37)
  • 我想开发一款跨平台桌面软件,请告诉我qt、electron、tauri、pyqt、flutter分别适合开发哪些跨平台桌面

    不同的跨平台桌面开发工具适用于不同的应用场景和开发者需求。以下是关于 Qt、Electron、Tauri、PyQt、Flutter 的简要说明,以帮助你更好地选择适合你项目的工具: Qt: 适用场景: Qt 是一个强大的 C++ 框架,适用于开发需要高性能和原生外观的桌面应用。它具有广泛的平台支持

    2024年02月22日
    浏览(43)
  • Golang WebView:打造跨平台的桌面应用

    随着互联网的发展和智能设备的普及,Web应用成为了主流的应用开发方式之一。然而,有些场景下仍然需要使用桌面应用来满足特定的需求。为了结合Web技术和桌面应用的优势,Golang提供了一种名为\\\"WebView\\\"的库,它可以帮助开发人员快速构建跨平台的桌面应用。本文将介绍

    2024年02月22日
    浏览(34)
  • 跨平台桌面端框架wails 修改默认图标

    博主开发了一个浏览器aweb123.com 执行 wails build就会自动生成新的图标

    2024年02月07日
    浏览(31)
  • 盘点 | 跨平台桌面应用开发的5大主流框架

    受益于开源技术的发展,以及响应快速开发的实际业务需求,跨平台开发不仅限于移动端跨平台,桌面端虽然在市场应用方面场景不像移动端那么丰富,但也有市场的需求。 相对于个人开发者而言,跨平台框架的使用,主要为了满足以下三个主要能力: 生产力提升:框架能

    2024年02月07日
    浏览(48)
  • ChatGPT扩展系列之跨平台桌面客户端ChatBox

    今天介绍一下好玩的东西——ChatBox 直接使用 ChatGPT API (OpenAI API) 是比较困难的,需要了解编程与接口调用,而且用起来不够方便。ChatBox 可以帮助你处理所有的底层调用。 ChatBox 还帮你在本地保存了所有的聊天记录和 prompt,防止在线服务的数据丢失。 ChatBox 还可以帮助你设计

    2023年04月20日
    浏览(47)
  • Flutter 实战:构建跨平台应用

    Flutter是由Google开发的一款开源移动应用开发框架,它可以帮助开发者在iOS和Android平台上快速、高效地开发应用。Flutter使用Dart语言作为开发语言,具有跨平台兼容性高、开发效率快、性能优异等特点。本文将通过实战案例,介绍如何使用Flutter构建跨平台应用。 在开始Flutte

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包