Tauri 是一个跨平台 GUI 框架,与 Electron 的思想基本类似。都是属于跨平台技术的解决方案
我们一般会把tauri作为 Electron 的替代方案,electron优点咱们不看,这里就提两个electron比较明显的问题:
Tauri 作为一种使用 Rust 和 Web 技术栈构建跨平台桌面应用的框架。这里也分析一下它的几个优点和缺点:
总的来说,Tauri 是一种非常有潜力的框架,它可以帮助开发者快速构建高性能、跨平台的桌面应用。但是,它也存在一些学习成本和可维护性等方面的问题,需要开发者在选型的时候有更多的思考。
其他环境的可以参考官方教学文档,在此不做赘述
xcode-select --install
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
使用 pnpm 创建项目
pnpm create tauri-app
选择完你熟悉的项目配置后,执行提示的内容,运行项目,会自动在桌面弹出初始化的窗口
完成项目内容后,我们可以在 tauri.conf.json 文件中配置 Webview 的选项,包括 Webview 库的版本、窗口大小、窗口样式、窗口标题、用户代理字符串等。
pnpm tauri build
直接执行打包会直接报个错 将tauri.conf.js的默认配置修改为build
再次执行打包就好了,然后直接安装使用
到此为止,我们体验了一把使用 Tauri 开发桌面端应用的流程。可以感知到,它对前端开发者是比较友好的,但是如果想深入掌握它,需要学习 Rust。
Tauri主要基于以下几个关键技术:
整体结构大致长这样👇🏻
通过这个架构,Tauri 提供了一种快速创建跨平台原生桌面应用程序的方法,充分利用了 Rust 的性能和 Web 技术的灵活性。那么,接下来简单讲一下这三块都有哪些内容。
语言
Tauri的核心是使用 Rust 语言编写的。在 Tauri 中,Rust 代码用于调用本地操作系统的 API,实现应用的后端逻辑,并与前端 Web 技术进行交互。Rust的一些主要特性包括:
总之,Tauri 的 Rust 代码是实现其核心功能的关键,使用 Rust 可以有效避免一些常见的安全漏洞,并且可以保证应用具有高性能、可靠性和扩展性。
Tauri 使用了多个 Rust 库,主要包括以下几个方面:
在Tauri中,Web技术主要用于两个方面:一是创建应用程序的UI界面,二是通过Webview与Rust代码通信。
先看看创建界面:我们可以使用HTML、CSS和JavaScript来创建应用程序的UI界面,也能够集成当前所有Web项目里头(包括React、Vue、Angular等等)。
接下来看看如何让Webview与Rust代码通信。
可以写在main.rs里
#[tauri::command]
fn hello(name: String) -> String {
format!("Hello, {}!", name)
}
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![hello])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
在上面的代码中,我们定义了一个hello函数,并使用tauri::command宏将其注册为一个Tauri事件。该函数接受一个名为name的字符串参数,并返回一个格式化的问候语
在JavaScript代码中,我们可以使用window.tauri.invoke方法来发送一个Tauri事件。例如,我们可以编写以下代码来调用Rust中的hello事件:
window.tauri.invoke('hello', { name: 'Alice' })
.then(response => {
console.log(response); // 输出 "Hello, Alice!"
});
在Tauri中,Webview是负责渲染应用程序UI的核心组件。具体来说,Webview是一个用于显示网页内容的窗口,类似于浏览器中的标签页。Tauri使用Webview作为应用程序的UI引擎,并使用Rust和JavaScript代码来控制UI的行为。
Tauri使用了一些第三方的Webview引擎,例如:webview、wry 和 cocoa webview。这些Webview引擎为Tauri提供了不同的支持平台和不同的性能特征。
另外,Tauri提供了一组Rust API,可以用于与Webview进行交互,例如:
除了使用Rust API之外,我们还可以使用JavaScript代码与Webview进行交互。例如,我们可以使用以下代码在JavaScript代码中获取Webview的引用:
const webview = window.tauri.promisified({
cmd: 'getWebview'
});
当我们获取了Webview的引用之后,我们可以使用JavaScript API来控制Webview的行为,例如:
通过使用这些API,我们可以实现高度自定义的UI界面,同时也可以方便地与Rust代码进行通信和交互。
Tauri官方文档 - https://tauri.app/
Awesome Tauri(精选的 Tauri 生态系统和社区中最好的东西,包含插件和应用,可以借鉴和学习) - http://github.com/tauri-apps/awesome-tauri。
Tauri issues(Tauri问答)- http://github.com/tauri-apps/tauri/issues
Tauri discussions(Tauri讨论社区) - http://github.com/tauri-apps/tauri/discussions
Rust 编程语言基本语法学习- http://doc.rust-lang.org/book/
crates.io(Rust生态的包管理网站) - http://doc.rust-lang.org/book/