V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
a1oyss0925
V2EX  ›  程序员

目前想写一个桌面应用,请问下技术栈选择

  •  
  •   a1oyss0925 · 34 天前 · 7424 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主要目的就是写着玩,给自己找点事情做,当然丰富下技术栈有利于找工作那是更好

    大致了解了下相关技术:electron 、tauri 、wails 、avalonia

    说实话 tauri 是真的不太想选,rust 感觉学习成本太高了。

    现在的目标就是写个邮件客户端,希望大伙给点意见

    90 条回复    2024-11-12 01:40:46 +08:00
    jeesk
        1
    jeesk  
       34 天前 via Android
    要不要多窗口? 不要多窗口就 wails , 否则 electron 。
    musi
        2
    musi  
       34 天前 via iPhone
    问就是 Electron
    你见过国内有哪些大厂的产品用 tarui wails avalonia
    Electron 我能给你说出来一堆
    xiaoqidev
        3
    xiaoqidev  
       34 天前   ❤️ 3
    我不会 rust ,但我已经用 Tauri 开发了十来个应用,其中包含多个商业应用和 20W 用户的 AI 抠图 /t/1059035
    yoiteshaw
        4
    yoiteshaw  
       34 天前
    Electron ,自从我在某全国有名的医院的排队系统看到 Electron 那熟悉的默认图标,我明白了它是经过大型业务的“检验”的。
    profchaos
        5
    profchaos  
       34 天前
    试了下 avalonia 的 dx 也太落后了,不像 web ,flutter 那种可以 hot reload 的,就是改一下 code behind 就要重新 build 一次,虽然 avalonia 好像评价还不错,但是我不是很喜欢
    COW
        6
    COW  
       34 天前
    反正是自己做着玩,就按名字选呗,avalonia 听着很强的感觉。
    flmn
        7
    flmn  
       34 天前   ❤️ 2
    Tauri 应用其实是以 js 为中心的。业务代码是 js 不是 rust 。
    COW
        8
    COW  
       34 天前   ❤️ 1
    @xiaoqidev 真的假的,这玩意不会 rust 也能做?
    a1oyss0925
        9
    a1oyss0925  
    OP
       34 天前
    @jeesk 没这方面需求
    @xiaoqidev 太强了,我去找找相关 demo 看看代码量
    JoeDH
        10
    JoeDH  
       34 天前
    electron 吧
    xiaoqidev
        11
    xiaoqidev  
       34 天前   ❤️ 1
    @COW #8 大家对 Tauri 存在误解,事实就是不写一行 rust 代码页面也能开发 Tauri 应用,任意前端技术栈就够,不过大多数情况下我也不推荐 Tauri ,新上手确实很难,用过几次之后才会觉得真香,遇到各种问题也确实需要 rust 解决,我一般找现有的库 + AI 解决,走过一些弯路,现在只考虑 Tauri ,当然我的应用大都不复杂,目前没遇到无法解决的问题
    shintendo
        12
    shintendo  
       34 天前
    额,Tauri 不需要写 Rust 的
    crackidz
        13
    crackidz  
       34 天前
    看你的后端代码需不需要大量的非前端代码,比如邮件客户端协议解析之类的。否则你要考虑一下写 Rust 是不是 OK...

    其他人的例子不太一样的地方是大部分功能是 web 就可以满足的,最多使用一些访问框架封装过的功能足以
    iOCZS
        14
    iOCZS  
       34 天前
    找工作的话,electron 或 qt
    jones2000
        15
    jones2000  
       34 天前
    vue 开发页面, 然后淘宝上找人包个壳,也就 200 块。 只要是页面都可以。没必要什么都自己搞, 多麻烦。
    angrylid
        16
    angrylid  
       34 天前
    你这两个需求都是打架的
    如果是出于找工作,为什么不先看一下招聘平台现在还有多少桌面客户端的工作呢
    写着玩的话,光微软的技术栈应该就有 MAUI/Xamarin, WinUI/Uno Platform, WPF/Avalonia 这三种 XAML 方言……
    niubee1
        17
    niubee1  
       34 天前   ❤️ 1
    Tauri 可以不用写 Rust 代码,但是会写 Rust 代码,可以让你的应用原地起飞
    ysc3839
        18
    ysc3839  
       34 天前 via Android
    Electron 就完事了
    yoiteshaw
        19
    yoiteshaw  
       34 天前   ❤️ 1
    @xiaoqidev
    @shintendo
    想请问一下为什么 tauri 不需要写 rust ?
    如果是纯 js 的工作,意思是先用 vue 或者 react 写好,然后直接挂载在 tauri-app 上么?
    一些文件读写,计算之类的操作我理解不应该是后端 rust 写的吗?
    谢谢指教。
    wnpllrzodiac
        20
    wnpllrzodiac  
       34 天前 via Android
    c++开发想到的是 mfc 和 qt. js 学习成本太大了
    zoharSoul
        21
    zoharSoul  
       34 天前
    qt?
    a1oyss0925
        22
    a1oyss0925  
    OP
       34 天前
    @crackidz 没考虑这点,那 rust 可能难度确实高了,还是在 wails 和 electron 中选吧
    HuberyPang
        23
    HuberyPang  
       34 天前
    https://github.com/pangxiaobin/image-matting python 技术栈 pywebview 和 vue3 实现的
    SHIINASAMA
        24
    SHIINASAMA  
       34 天前
    最近在研究 gpui ,无聊玩玩
    panda1001
        25
    panda1001  
       34 天前 via Android   ❤️ 1
    自用的桌面软件,列一些技术栈
    1.electron
    商业:notion typora obsidian 阿里云盘 vscode qqnt 开源:arduino2 lxmusic motrix
    2. Qt
    商业:tg WPS 向日葵 Snipaste 开源:nekoray
    3.Java/Ktotin
    商业:jb 全家桶 matlab 开源:eclipse arduino1
    4.c#
    商业:有个 tasker ,大厂的少
    开源:v2rayn powertoy screen2gif
    5.win32/MFC
    商业:potplayer bandzip 毒瘤系等
    开源:trafficmonitor notepadplus tortoisegit

    真 to c 还是兼容性最好/无预装的技术栈,也许会觉得土鳖,实际装机量还是最大的。按以上玩玩和工作都联系到,选 electron
    baobao1270
        26
    baobao1270  
       34 天前   ❤️ 1
    flutter 吧,方便跨平台
    liyafe1997
        27
    liyafe1997  
       34 天前 via Android
    怎么没有人提 Flutter
    RichardPlus
        28
    RichardPlus  
       34 天前   ❤️ 1
    投票给 Avalonia ,试试水 :)
    levelworm
        29
    levelworm  
       34 天前
    QT 感觉其实还挺快的。
    shakukansp
        30
    shakukansp  
       34 天前
    为啥 tauri 不用会 rust ?
    那个 web 运行环境能读写文件和跨域请求吗?
    webcape233
        31
    webcape233  
       34 天前 via iPhone
    要和本地文件系统交互等一些工作还得写 rust 的,我是用 wails ,因为我有不少需要操作本地文件系统相关的工作,wails 的话用 go 即可。https://blog.moonguard.dev/why-golang-instead-of-rust-to-develop-the-krater-desktop-app
    rhinoc
        32
    rhinoc  
       34 天前 via Android
    最近在用 tauri 写 macOS 的应用,v2 的文档还是太差了,然后 rust 占比虽然很少但多多少少要会一点(可以通过 ai 或者看报错提示去写)。
    另外如果对 ui 要求比较高也不建议 tauri ,比如要实现原生的磨砂半透明效果或者圆角窗口需要开 private API 直接杜绝上架了。并且设置圆角窗口后,自带的 border 也经常抽风变成直角的。
    yuanyao
        33
    yuanyao  
       34 天前 via iPhone
    python 的 nicegui 试试?之前用来写游戏挂机脚本还不错
    zhuangzhuang1988
        34
    zhuangzhuang1988  
       34 天前
    不跨平台的化试试
    webview2 + winform ?
    nikenidage1
        35
    nikenidage1  
       34 天前
    我之前用.net 的 avalonia 写了一个小玩具,跨平台,原生编译,无需运行时
    https://v2ex.com/t/952603
    PTLin
        36
    PTLin  
       34 天前
    @rhinoc 说的对,v2 的文档就是狗屎,权限的各种东西都没写清楚。前两天用 tauri v2 配合 vue ,实现多窗口的时候碰到一堆坑,最后发现是权限的 router history 的问题。
    抛开权限那些坑,只写 desktop 的话还算可用。
    PTLin
        37
    PTLin  
       34 天前
    @shakukansp 可以的,tauri 提供了很多 native 功能的 plugin ,安装了对应 plugin 就可以在 js 端使用提供的 api 实现对应的功能,比如文件的 https://tauri.app/plugin/file-system/ 。http 的 https://tauri.app/plugin/http-client/
    xujinkai
        38
    xujinkai  
       34 天前 via Android
    主要还是看后端代码多不多,前端感觉 web 技术栈最简单方便。我的项目是 dotnet 加 webview2 搞的,自己写了一些通信的代码,C#和 typescript 一起写还挺爽 https://onequick.org/
    lscho
        39
    lscho  
       34 天前
    @yoiteshaw
    @shakukansp
    @COW

    按照 js 和 nodejs 的关系,或者 app 开发里的的 JSBridge 来理解就可以了,js 本身不具备原生能力,但是 nodejs 提供了一个 v8 作为 runtime ,JSBridge 提供了 SDK 来映射原生接口。

    tauri 也一样,原生能力是 tauri 框架里 rust 提供的,但是开发者只需要写 js 调用就可以了。
    asm
        40
    asm  
       34 天前
    没人或者没工作逼你的话,远离 electron 。
    xiaoqidev
        41
    xiaoqidev  
       34 天前   ❤️ 1
    @yoiteshaw #19 任何一个前端项目都可以直接加上 Tauri ,官方提供了丰富的插件和接口,通过 js 即可调用。也不是完全不需要 rust ,只是不写 rust 也能开发,常见的需求官方都提供了,官方没有的还是需要写 rust ,rust 有丰富的库,能想到的基本都有现成的 crates 可以用,我靠 AI 也写了大几千行 rust ,大部分我都看不懂,但不影响它运行,当然有一些性能问题、个别情况异常闪退啥的我也处理不了
    sir283
        42
    sir283  
       34 天前   ❤️ 1
    写桌面应用,Windows 平台只推 C#,跨平台只推 Qt 。
    xgdgsc
        43
    xgdgsc  
       34 天前 via Android
    https://zhuanlan.zhihu.com/p/654288010?utm_psn=1838903415104757760 rust 难得话可以考虑学简单的 Julia 做 electron 后端,虽然现在打包文件很大,未来会变小的 https://github.com/terasakisatoshi/libcalcpi_juliac 。现在还有一个第三方的闭源编译器可以交叉编译类型稳定的 Julia 子集到 Cpp https://github.com/thautwarm/julia-android-example .
    iorilu
        44
    iorilu  
       34 天前
    @sir283 qt 本来底子是好的

    但官方这么多年也没搞点好的 ui 方面得支持, 我指的是现成得比较现代化得 ui 库

    虽然官方有什么 qss, qml 等, 但普通开发者也没能力在这方面做的好

    无所谓 ui 是否现代化, qt 确实是最好得跨平台选择
    dadaji
        45
    dadaji  
       34 天前 via iPhone
    FightPig
        46
    FightPig  
       34 天前
    如果 你开发的东西给开发者用,可以选 tauri,如果给普通用户用,直接放弃,有人还在用 win7,你能想像到他怎么安装 tauri 的依赖么?
    fyxtc
        47
    fyxtc  
       34 天前
    我给一个思路:你把你备选的几个 demo 都手敲一遍,改一改,哪个最舒服就用哪个,都说是玩玩了还考虑那么多没必要,来这里问也是百家争鸣。
    bluearc
        48
    bluearc  
       34 天前
    投 flutter 一票,但考虑工作的话还是 electron 或者 qt
    lqw3030
        49
    lqw3030  
       34 天前
    https://github.com/tw93/Pake
    这个项目可能可以满足你的需求
    Serino
        50
    Serino  
       34 天前
    试试那个超级胶水的 aardio ?
    BYDH
        51
    BYDH  
       33 天前
    我梦到过若干年后的某天用游戏引擎写软件界面,可能是 godot ,醒来评估了一下,还是有点重,选的 raylib
    sujin190
        52
    sujin190  
       33 天前 via Android
    @RichardPlus 公司的商业项目用 Avalonia 重做完了,性能和兼容性都还可以。win7 上也能正常运行,挺好的
    sujin190
        53
    sujin190  
       33 天前 via Android
    @profchaos 确实界面 xml 的热重载几个 ide 支持都有问题,不过.net 的热重载倒是微软搞的,不过 xaml 文件 avalonia 中还是被编译为 c#代码了不是运行时加载的,不知道微软 c#的热重载咋搞的,否则还真不好弄
    jlkm2010
        54
    jlkm2010  
       33 天前
    1. electron
    2. qt
    3. Java/Ktotin

    这三个中选一个,都有海量成熟案例
    RichardPlus
        55
    RichardPlus  
       33 天前
    @sujin190 666 ,目前还没啥跨平台的需求,不然确实可以从 WPF 跳出来了
    roundgis
        56
    roundgis  
       33 天前 via Android
    @jlkm2010 kotlin 用哪些技术? kmm?
    jlkm2010
        57
    jlkm2010  
       33 天前
    @roundgis kotlin 也用 javafx 或者 swing
    huage
        58
    huage  
       33 天前
    选来选去,我也是选择了 electron ,可能我技术底子差
    johnnyyeen
        59
    johnnyyeen  
       33 天前
    不考虑包大小的话,electron 是相对最成熟的。
    sunmker
        60
    sunmker  
       33 天前
    不跨平台,C# WPF
    hover
        61
    hover  
       33 天前 via Android
    最近写了几个项目,用的 Avalonia 和 WinUI3 。
    zhangeric
        62
    zhangeric  
       33 天前
    不跨平台,对性能有要求,建议微软全家桶.
    跨平台,对性能有要求就 qt,没要求 electron
    zhuzixian
        63
    zhuzixian  
       33 天前
    不跨平台:WPF
    跨平台:Avalonia
    kxg3030
        64
    kxg3030  
       33 天前
    winform pyqt qr arrdio 选一个 js 的方案不要考虑
    liaohongxing
        65
    liaohongxing  
       33 天前
    Tauri 做商业应用坑定是不行的,最大问题就是跨平台的浏览器内核版本不一致 ,比如用到了一些最新的 css, js 特性,另外这东西一旦没法运行 ,连反馈渠道都没有(因为没运行起来),商业产品大忌。
    KeysPAN
        66
    KeysPAN  
       33 天前
    @xiaoqidev 可以推荐一下学习网站吗,我是嵌入式的,又不想用 QT 写,想顺便接触一下前端。Tauri 官网的好像没什么教程
    INCerry
        67
    INCerry  
       33 天前
    桌面开发还是得相信老牌,从语法舒适度、性能、支持等各个来说,不跨平台选 WPF ,跨平台 Avalonia
    Yanlongli
        68
    Yanlongli  
       33 天前
    简单的跨平台:electron ( JS )、tauri ( JS )
    复杂的跨平台:flutter ( Dart )、Slint ( Rust )、QT ( C++)
    leegoo
        69
    leegoo  
       33 天前
    桌面端只用过 flutter ,投 flutter 一票...
    ca2oh4
        70
    ca2oh4  
       33 天前
    qt 跨平台同版本,在不通发行版 gui 表现都不一致
    nilaoda
        71
    nilaoda  
       33 天前
    tauri 要考虑不同系统的兼容性
    xiaoqidev
        72
    xiaoqidev  
       33 天前
    @KeysPAN #66 没看到有系列教程,基本只看了官方文档,前端没遇到过问题,坑都在 rust 上,Google + AI 也都找到了答案,我也尝试过写系列教程分享我从 0 学习到上架的整个过程,每次分享都有大量的批评和反对,但沟通中发现他们连项目都没跑起来过,教程试了几次关注量都在个位数已搁置,也没见过有像我这样大量用于商业项目的
    lmq2582609
        73
    lmq2582609  
       33 天前
    tauri 确实提供了很多插件,可以直接编写 js 或 ts 代码而不需要编写 rust 代码,但这些插件 bug 可不少,当你发现 js 或 ts 有 bug 然后在 github 提了 issues 也没人解决的时候,就得换成用 rust 去解决了,所以还是需要掌握一些 rust 基础语法的,也不用掌握太高深
    KeysPAN
        74
    KeysPAN  
       33 天前
    @xiaoqidev 主要是不懂前后端的联动是怎么实现的,就 helloworld 那个就够我喝一壶了。没这个意识。我是想写些小工具用的,用 Qt ,感觉成本更高,美化 UI 就把我干掉了。商用的应该不多,毕竟才两年的框架。不着急的
    pipixiarwksb
        75
    pipixiarwksb  
       33 天前
    最好别用 py 类工具的去写,打包都搞死人 ,顺便问下 有没有打包方便的不容易被反编译的工具写桌面应用
    CHTuring
        76
    CHTuring  
       33 天前
    说写 tauri 不用会 rust 的,那你的应用就是包个壳,那和你用 Pake 直接打包网页有什么区别?
    capgrey
        77
    capgrey  
       33 天前
    投一票 Flutter ,因为我真爱谷歌
    xiaoqidev
        78
    xiaoqidev  
       33 天前
    @KeysPAN #74 前后端通信由框架实现,直接用
    HaroldFinchNYC
        79
    HaroldFinchNYC  
       33 天前
    @sujin190 #52 macos 和 linux 呢
    qiniu2025
        80
    qiniu2025  
       33 天前
    有 cursor ,你只需要选择编译部署最得心应手的,语言不重要
    iorilu
        81
    iorilu  
       33 天前
    @pipixiarwksb tauri 阿, 你核心逻辑用 rust 写肯定不容易被反编译
    sujin190
        82
    sujin190  
       33 天前 via Android
    @HaroldFinchNYC 都运行良好,性能很不错,而且一致性非常好,可以说完全一致,我们完成了 macos 的 arm64 ,uos 的龙芯芯片,银河麒麟的海思 x86 芯片的测试,完全不比 win 差,并且.net8 现在打包时可以选择报告运行时,所以安装完直接可以用,并不需要先安装.net 运行时
    byasm32
        83
    byasm32  
       33 天前
    c++纯手搓 要啥框架
    mandex
        84
    mandex  
       33 天前
    electron 吧,我用了好几年 electron 了,虽然这玩意一坨屎,但是其他几个更不行
    gumusu
        85
    gumusu  
       33 天前 via Android   ❤️ 1
    有没有用 kotlin compose multiplatform 的聊聊😂
    YiXinCoding
        86
    YiXinCoding  
       33 天前
    Electron 和 Tauri 都用过。Tauri 真香,打包就 2M ,但 Rust 写的头大。独立开发完全没问题:/t/1068568
    YiXinCoding
        87
    YiXinCoding  
       33 天前
    Tauri 做的,借地方打个广告,重新贴一下链接:
    https://www.v2ex.com/t/1068568
    https://kite.kitlib.cn/

    [img][/img]

    另外小黄鱼接单 Tauri 答疑

    [img][/img]
    Lemon2ee
        88
    Lemon2ee  
       32 天前
    @shakukansp 还真行,有 fs plugin: https://v2.tauri.app/plugin/file-system/#usage

    tauri 有一些 plugin 还是只有 rust ,但是做一个很基础的桌面 app 只会 js 好像也行。
    spkingr
        89
    spkingr  
       32 天前 via Android
    @gumusu 我也推荐这个 KMM ,跨平台,性能优,语法也丝滑,类似 react 写法。
    electron 也可以,就是得会优化吧,东西很大。
    qt 还是难。
    HaroldFinchNYC
        90
    HaroldFinchNYC  
       32 天前
    @sujin190 #82 那真不错啊
    我有点想学这个,但不是很确定
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2476 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:17 · PVG 15:17 · LAX 23:17 · JFK 02:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.