前言
我的技术栈主要是vue3、go、java等。
前端对界面的表达力是最强的,所以暂不考虑原生相关的ui技术,如fyne、QT bind。
而单纯的基于web的跨端方案,虽然能提供一些基本的系统级操作,但对于自定义的底层需求还是需要go来处理。
我选的技术方案就落在了vue+go上,从原理上分为:
- 独立UI+websocket+底层Go:
electron
,tauri
- Go控制的UI+websocket+底层Go:
lorca
,webview
- Go完整打包的UI+jsBridge:
wails
方案比较
electron
算是web跨端中最具生态和成熟的方案,几年内也陆陆续续用过几次。
但最终也是因为它打包太大、依赖安装经常失败、打包上也遇到不少坑,太过折腾就放弃了。
tauri
底层由rust实现,UI渲染依赖于webview2或webkit,提供js api访问系统功能、以及和rust底层交互。
以前端开发为主视角,tauri的相关库放置于前端工程中的src-tauri文件,对前端项目的侵入性较小。
能打包成一个独立的程序,在OSX下测试的效果还不错。
但是在windows下搭建环境时会遇到依赖安装错误,打包工具是基于node的,过于折腾就先不去解决了(交叉编译的支持也在计划内)。
目前tauri发布了beta版本,go binding的支持还在计划内,所以如果我要以go为底层的话,只能采用websocket或http的通信方式。
tauri还计划发布android和ios版本,可以期待下。
lorca
https://github.com/zserge/lorca
原理上是从go调用了chrome,然后启动了定制化的chrome界面,所以需要依赖chrome。
这是我用的比较多的一个,因为直接可以从go来控制启动关闭,加载页面等等。
缺点也很明显,开启应用本身是chrome的一个窗口,所以不能做过多的定制化。和go之间的通信,需要自行用websocket或http。
其兄弟项目 github.com/zserge/webview,提供了较多的定制功能,将webview内置。但是在编译打包时还是有一些坑,以及有些功能没找到用法(可能得用c++?),比如全屏。
wails
和tauri类似,但是底层为go,而且是以go项目的主视角来打包,也是基于webview2或webkit。
v2的总体使用体验很不错,优势如下:
- 可以做到前后端分离开发,打包时只需要在go中引入前端打包好的dist资源即可。
- 提供了js和go之间的进程内通信。
- 打包工具是基于go的,基本能避免基于node打包时依赖安装的“劣根性”。目前在windows中打包运行测试很顺畅。
目前推出v2版本,支持windows10 64位、OSX、Linux。支持交叉编译。
注意:不支持windows7,缺少shcore.dll。所以win7下需要考虑其他方案。
go-webview2
类似webview,比lorca更有定制性,是wails的依赖。
windows下可以考虑这个轻量级方案。
总结
我会持续关注wails和tauri的进展。
项目应用中,将从lorca逐步迁移到wails的方式中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。