架构(Architecture)
介绍(Introduction)
Tauri 是一个 多语言(polyglot)且通用的应用开发工具包, 具有高度的可组合性,可以让工程师构建各种类型的应用程序。
Tauri 通过 Rust 工具链 + WebView 渲染 HTML 的方式构建应用程序。
一个 Tauri 应用通常包含:
- JavaScript API
- Rust API
WebView 可以通过 消息传递(message passing)机制 与系统交互。
开发者可以:
- 扩展默认 API
- 编写自己的系统功能
- 将 WebView 前端 与 Rust 后端 连接起来。 ([Tauri][1])
Tauri 应用还支持:
- 系统托盘(System Tray)
- 自动更新
- OS 原生管理方式
由于 Tauri 使用 操作系统自带的 WebView,因此应用体积非常小。
同时:
Tauri 的最终程序是 Rust 编译后的二进制文件, 因此 不会携带额外运行时(runtime)。
这也是 Tauri 应用体积小且 逆向难度较高 的原因之一。 ([Tauri][1])
Tauri 不是什么(What Tauri is Not)
不是轻量内核封装
Tauri 不是一个轻量级 kernel wrapper。
它直接使用底层库:
- WRY
- TAO
来完成与操作系统的交互。 ([Tauri][1])
不是虚拟机
Tauri 不是 VM 或虚拟化环境。
它只是一个 构建 WebView 应用的工具包。 ([Tauri][1])
核心生态系统(Core Ecosystem)
Tauri 的核心架构由多个 Rust crate 组成。
tauri
tauri 是整个系统的 核心 crate。
它负责:
- 集成运行时
- 宏(macros)
- 工具库
- API
在 编译阶段:
- 读取
tauri.conf.json - 解析配置
- 生成应用配置
在 运行阶段:
- 注入脚本(polyfill 等)
- 提供系统 API
- 管理应用更新。 ([Tauri][1])
tauri-runtime
tauri-runtime 是:
Tauri 与 WebView 库之间的胶水层(Glue Layer)。
tauri-macros
提供 Rust 宏,用于生成:
- command handler
- context
- 命令注册代码
底层依赖:
tauri-codegen
tauri-utils
公共工具库,提供:
- 配置文件解析
- 平台识别
- CSP 注入
- 资源管理等功能。 ([Tauri][1])
tauri-build
tauri-build 在 编译阶段工作。
它会:
- 应用宏
- 配置 Cargo
- 准备构建环境。 ([Tauri][1])
tauri-codegen
负责:
- 嵌入应用资源
- 生成代码
- 解析
tauri.conf.json
同时会:
- 打包图标
- 压缩资源
- 生成 Config 结构体。 ([Tauri][1])
tauri-runtime-wry
这是 WRY runtime 的实现层。
负责系统级功能,例如:
- 打印
- 显示器检测
- 窗口管理。 ([Tauri][1])
Tauri 工具链(Tauri Tooling)
Tauri 还提供一整套工具。
JavaScript / TypeScript API
这是一个 TypeScript 库,用于:
- 在前端导入 API
- 调用 Rust 后端功能
- 监听系统事件
该库提供:
- CommonJS(cjs)
- ES Modules(esm)
它通过 WebView 消息通信 实现前后端交互。 ([Tauri][1])
Bundler(打包工具)
一个 Rust / Shell 工具,用于:
- 构建应用
- 生成平台安装包
当前支持:
- Windows
- macOS
- Linux
未来支持:
- Mobile。 ([Tauri][1])
cli.rs
一个 Rust 编写的 CLI 程序。
提供:
- 项目开发
- 构建
- 打包
- 运行等功能。 ([Tauri][1])
cli.js
JavaScript 包装器:
- 基于
napi-rs - 用于生成 npm CLI。 ([Tauri][1])
create-tauri-app
用于:
快速创建 Tauri 项目模板。 ([Tauri][1])
上游组件(Upstream Crates)
Tauri 维护两个核心底层库:
TAO
TAO 是:
跨平台窗口管理库(Windowing Library)
支持:
- Windows
- macOS
- Linux
- iOS
- Android
负责:
- 创建窗口
- 系统托盘
- 菜单
- 生命周期管理。 ([DevTools Guide][2])
WRY
WRY 是:
跨平台 WebView 渲染库。
负责:
- WebView 创建
- JS 执行
- IPC 消息通信
- 自定义协议。 ([DevTools Guide][2])
插件(Plugins)
Tauri 插件通常提供三部分:
1️⃣ Rust 功能实现 2️⃣ 应用集成接口 3️⃣ JavaScript API
示例插件:
- tauri-plugin-fs
- tauri-plugin-sql
- tauri-plugin-stronghold。 ([Tauri][1])
Tauri 架构总结
Tauri 实际是 四层架构:
Application (你的应用)
↓
Tauri Core
↓
WRY (WebView)
↓
TAO (Window / OS API)
↓
Operating System
或者更常见的开发视角:
Frontend (Vue / React / HTML)
↓
Tauri JS API
↓
IPC
↓
Rust Backend
↓
OS API
其中最关键的是:
IPC(Inter-Process Communication)通信桥。
前端通过:
invoke()
调用 Rust 函数执行系统操作。 ([DevTools Guide][2])
一句话理解 Tauri 架构
可以把 Tauri 理解为:
Web UI
+
Rust Native Backend
+
OS WebView
而不是:
Chromium Runtime (Electron)
所以:
| 框架 | UI | Runtime |
|---|---|---|
| Electron | Web | Chromium |
| Tauri | Web | OS WebView |
💡结合你现在在做的 IM 多端客户端, 理解这页 Architecture 后会得出一个非常关键的工程结论:
Tauri 其实是三层系统:
UI (Vue / React)
Core (Rust)
OS (TAO + WRY)
这就是为什么:
- Web UI 可以 100%复用
- Desktop / Mobile 只换 Container
