1.2 Tauri 的整体架构
3 分钟阅读
原文链接: Tauri Architecture
1.2 Tauri 的整体架构
上一节我们把 Tauri 比作“Web 前端 + Rust 后端”。这一节把中间的黑盒拆开,让你知道每个英文名词到底负责什么。
一张图看懂分层
flowchart LR
subgraph FE["前端(可选任意框架)"]
A["Web 页面"]
B["@tauri-apps/api"]
end
subgraph BRIDGE["Tauri 提供的一层"]
C["IPC 消息通道"]
D["tauri 主 crate / Rust 命令"]
end
subgraph LOWER["Tauri 的两个上游库"]
E["TAO:创建窗口、菜单、托盘"]
F["WRY:调用系统 WebView"]
end
subgraph OS["操作系统"]
G["macOS WKWebView<br/>Windows WebView2<br/>Linux WebKitGTK<br/>iOS WKWebView<br/>Android WebView"]
end
A --> B --> C --> D
D --> E
D --> F
F --> G从左到右可以这样理解:
- 前端页面负责 UI,通常用 Vite、Next.js、Nuxt 等工具构建成静态资源。
@tauri-apps/api是官方 JavaScript/TypeScript 库,提供invoke()、listen()等函数。- IPC 通道把前端的请求送到 Rust。
tauricrate 是整套框架的核心,负责装配命令、窗口、插件、配置等。- TAO 与 WRY 是 Tauri 团队维护的两个底层 Rust 库:
- TAO:跨平台创建原生窗口、系统菜单、托盘图标等。
- WRY:跨平台把 WebView 嵌入到 TAO 创建的窗口里。
- 最后真正“画网页”的是操作系统自带的 WebView(桌面与移动端皆如此),Tauri 不重复造浏览器。
核心 Rust 库家族
在 Rust 生态里,“Tauri”不只是一个大库,而是一组分工明确的 crate:
| crate | 作用 |
|---|---|
tauri | 总装框架,导出 Builder、command、事件等 API |
tauri-runtime | 连接 Tauri 与底层 WebView 库的中间层 |
tauri-macros / tauri-codegen | 在编译期生成命令、上下文等代码 |
tauri-utils | 解析配置、平台检测、CSP、资源管理等公共工具 |
tauri-build | 构建脚本,读取配置并生成能力文件等 |
tauri-runtime-wry | 让 Tauri 使用 WRY/TAO 时的系统级实现 |
配套工具
光有库还不能方便地开发,所以 Tauri 还提供一组工具:
- CLI(
tauri命令):执行dev、build、android、ios、icon、add等操作。CLI 有两种安装形态:Rust 版cargo tauri和 npm 版npm run tauri。 @tauri-apps/cli:npm 包装的 CLI,方便与前端工程统一安装。@tauri-apps/api:前端使用的官方 API。- Bundler(桌面打包器):把桌面端编译结果打成
.app、.dmg、.exe、.msi、.deb、.rpm等安装包;Android 的 APK/AAB 由 Gradle 生成,iOS 的 IPA 由 Xcode 导出。 create-tauri-app:交互式脚手架,用来创建新项目。- 插件体系:官方和社区把文件系统、对话框、剪贴板、通知等功能封装成插件。
一个“多语言”设计
Tauri 文档中常出现 polyglot(多语言)这个词。意思是:
- 你不必用 Rust 写完整应用,也可以只用 Web 技术。
- 前端调用 Rust 命令时,参数会通过 JSON 序列化,所以 Rust 的
struct和 TypeScript 的interface能“对上话”。 - 在移动端,插件还能调用 Kotlin(Android)或 Swift(iOS)代码,把原生能力也接进来。
官方文档原文与延伸阅读
本页内容整理自 Tauri Architecture。想继续深入,可阅读:
- 进程模型:为什么有“核心进程”和“WebView 进程”。
- IPC 概念:Events 与 Commands 的定位。
- 4.1 进程模型与系统 WebView。