初识Tauri
前端技术日新月异,利用前端技术开发桌面应用程序是一个焦点话题,目前已有Electron这样的重量级框架,也诞生了Tauri这样的年轻充满朝气的框架。
本人更偏爱Tauri框架,本文结合一个小例子对该框架做简单介绍。
Tauri简介
一言以蔽之,Tauri和Electron一样,是一种利用Web技术开发跨平台桌面应用的框架。就当前市场占有率而言,Electron无疑是该领域的王者。
两者主要区别如下:
- Electron软件打包自带完整浏览器内核,软件体积巨大;Tauri利用操作系统自带的WebView进行渲染,体积较小,但是对软件兼容性测试提出了更高要求。
- Electron采用JS进行全栈开发(利用Nodejs进行后台开发);Tauri后台采用Rust,前台可以使用任意前端框架。
- Electron生态更加成熟,且有大型软件已使用该技术栈;Tauri相对年轻,生态系统正在构建。
案例说明
本文在示例代码的基础上,添加一个按钮和段落,用户单击按钮时,会创建一个文件并向文件中写入文本。文件操作逻辑借助Rust后台实现。
创建项目很简单,执行以下代码即可:npm create tauri-app@latest
。
前台Vue代码
1 | <script setup lang="ts"> |
- 在既有代码的基础上分别新建一个
writtenBytes
变量,并创建一个<button>
和<p>
标签,后者用于呈现该变量,给按钮单击事件绑定create_file
处理逻辑。 - 重点在于
create_file
的逻辑实现,在这里通过invoke
方法调用rust代码中的create_file()
方法,前台和后台的方法名一致。
后台Rust代码
1 | // Learn more about Tauri commands at https://tauri.app/develop/calling-rust/ |
- Rust后台代码中的
create_file()
方法主要功能是创建一个文件,并向该文件写入内容。 - 使用了名为
winapi
的包,实际上有微软官方包可用(windows
或windows-sys
),但这两个包无法调用WriteFile()
,可能是Bug。 - 定义函数后,需要在
invoke_handler()
参数中指定该方法,这样才能暴露给前台调用。