菜单

Tauri 是什么?

相关源文件

Tauri 是一个使用 Web 技术(HTML、CSS、JavaScript)和 Rust 后端构建桌面应用程序的框架。它使开发者能够创建轻量级、安全且跨平台的应用程序,同时注重小巧的二进制文件大小和高性能。与 Electron 等类似解决方案不同,Tauri 利用操作系统原生 WebView,而不是捆绑整个 Chromium 运行时。

有关 Tauri 中使用的关键概念的信息,请参阅关键概念。有关代码库组织的详细信息,请参阅项目结构

来源: README.md12-16 ARCHITECTURE.md7-9

核心架构

Tauri 遵循分层架构,包含四个主要层

  1. 前端层:基于 Web 的 UI 和用于与 Rust 后端通信的 JavaScript API
  2. 核心层:管理应用程序状态、窗口创建和通信
  3. 构建层:处理配置、编译和打包
  4. 平台层:与原生平台 API 交互,用于窗口管理和 WebView 渲染

来源: ARCHITECTURE.md18-52 README.md14-16

技术实现

Tauri 通过一个称为进程间通信 (IPC) 的系统在前端和后端之间采用消息传递方法。这允许 JavaScript 代码调用 Rust 函数,反之亦然。该架构遵循几个重要的设计原则

  1. 分层架构:前端、核心、构建和平台层之间清晰分离
  2. 跨平台抽象:平台特定细节通过 Runtime trait 进行抽象
  3. 事件驱动架构:通过全面的事件系统处理核心交互
  4. 插件系统:通过一致的插件架构实现可扩展性

来源: crates/tauri/src/ipc/channel.rs13-32 ARCHITECTURE.md116-124 ARCHITECTURE.md23-27 README.md14-16

关键组件

Tauri Core

这是将框架所有部分整合在一起的核心组件。它在编译时读取配置文件,在运行时注入脚本,托管系统交互的 API,并管理应用程序更新。

WRY (WebView Rendering Library)

一个跨平台的 WebView 渲染库,支持所有主流桌面平台。Tauri 使用 WRY 作为特定于平台的 WebView 实现的抽象层。

  • Windows: WebView2
  • macOS: WKWebView
  • Linux: WebKitGTK
  • Android: Android System WebView
  • iOS: WKWebView

TAO (Window Management)

一个跨平台的应用程序窗口创建库,负责处理不同平台的窗口管理。它是 winit 的一个分支,并为 Tauri 的特定需求(如菜单栏和系统托盘功能)进行了扩展。

进程间通信(IPC)

用于连接 JavaScript 前端和 Rust 后端的系统,支持

  • 从 JavaScript 调用命令到 Rust
  • 组件之间的事件分发
  • 用于数据流的 Channel API
  • 状态管理

来源: ARCHITECTURE.md23-27 ARCHITECTURE.md79-86 crates/tauri/src/ipc/channel.rs45-50

平台支持

Tauri 支持以下平台

平台支持的版本
Windows7 及以上版本
macOS10.15 及以上版本
Linuxwebkit2gtk 4.0+ (Ubuntu 18.04+)
iOS/iPadOS9 及以上版本
Android7 及以上版本

来源: README.md42-52

主要特点和优势

小巧的二进制文件大小

与 Electron 等替代方案相比,Tauri 应用程序的二进制文件大小显著减小,因为它不捆绑 Chromium 运行时,而是利用操作系统原生的 WebView。

注重安全

  • 没有用于服务内容的 localhost 服务器
  • 细粒度的权限系统
  • 内容安全策略 (CSP) 注入

丰富的功能

  • 内置应用程序打包器,用于创建特定于平台的包(如 .app.dmg.deb.exe 等)
  • 桌面应用程序的自更新程序
  • 系统托盘支持
  • 原生通知
  • 自定义应用程序菜单

开发工作流

应用程序使用 Web 技术作为前端,Rust 作为后端进行构建。开发工作流程通常包括

来源: README.md30-41 ARCHITECTURE.md122-140 ARCHITECTURE.md165-177

与 Electron 的区别

功能TauriElectron
WebView 引擎操作系统原生 WebView捆绑的 Chromium
后端语言RustNode.js (JavaScript/TypeScript)
二进制文件大小较小(约 3-20MB)较大(约 100-200MB)
内存使用较低较高
运行时支持编译为原生代码需要 Node.js 运行时
安全模型细粒度的权限默认完全系统访问
移动支持Windows、macOS、Linux、iOS、AndroidWindows, macOS, Linux
开发体验Web + RustWeb + JavaScript

来源: README.md14-16 ARCHITECTURE.md13-17