告别 Electron 的臃肿:用 Tauri 打造「轻如鸿毛」的桌面应用
Tauri 是一个开源框架,用于构建基于 Web 前端的跨平台桌面应用程序,主要使用 Rust 语言开发。它注重轻量级的包体积、速度和安全性,可与各种前端框架集成,并使用操作系统原生的 Web 渲染器。该框架通过事件和命令实现 Web 视图和 Rust 进程之间的双向通信。Tauri 采用 MIT 或 MIT/Apache 2.0 许可,并提供诸如自动更新、核心插件系统和 GitHub Actions 集成等功能。
Tauri 是一个开源框架,用于构建基于 Web 前端的跨平台桌面应用程序,主要使用 Rust 语言开发。它注重轻量级的包体积、速度和安全性,可与各种前端框架集成,并使用操作系统原生的 Web 渲染器。该框架通过事件和命令实现 Web 视图和 Rust 进程之间的双向通信。Tauri 采用 MIT 或 MIT/Apache 2.0 许可,并提供诸如自动更新、核心插件系统和 GitHub Actions 集成等功能。
1. 什么是 Tauri
Tauri 是一个用于构建轻量级、高性能跨平台桌面应用的开源框架。它允许开发者使用 Web 前端技术(HTML/CSS/JavaScript)构建 UI,同时使用 Rust 编写后端逻辑,最终编译为原生可执行文件。
2. 核心架构
┌─────────────────────────────────┐
│ 前端 (WebView) │
│ HTML / CSS / JS / Framework │
├─────────────────────────────────┤
│ Tauri Core (Rust) │
│ IPC Bridge / Plugin System │
├─────────────────────────────────┤
│ OS Native APIs │
│ File System / Network / Tray │
└─────────────────────────────────┘
- 前端层:运行在系统 WebView 中(Windows: WebView2, macOS: WKWebView, Linux: WebKitGTK),支持 React、Vue、Svelte 等任意前端框架
- IPC 通信层:通过
invoke机制实现前后端安全通信,支持命令式调用和事件系统 - 后端层:纯 Rust 编写,负责系统级操作、业务逻辑和安全敏感任务
3. 与 Electron 的对比
| 特性 | Tauri | Electron |
|---|---|---|
| 后端语言 | Rust | Node.js |
| 打包体积 | ~2-6 MB | ~80-150 MB |
| 内存占用 | 低 | 较高 |
| 安全性 | 更高(Rust + 权限系统) | 一般 |
| 生态成熟度 | 成长中 | 非常成熟 |
| 学习曲线 | 需了解 Rust | 仅需 JS/TS |
| 渲染引擎 | 系统 WebView | Chromium |
| 许可证 | MIT / Apache 2.0 | MIT |
4. 核心特性
4.1 安全性
- 默认安全:所有系统 API 默认关闭,需在配置文件中显式声明权限
- CSP 支持:内置 Content Security Policy 配置
- Rust 内存安全:无 GC、无内存泄漏风险
- 沙箱隔离:前端无法直接访问系统资源
4.2 插件系统
- 官方插件:文件系统、HTTP 请求、通知、系统托盘、剪贴板、对话框等
- 社区插件丰富,支持自定义插件开发
- Tauri v2 引入了更完善的插件架构
4.3 跨平台支持
- ✅ Windows (x64, arm64)
- ✅ macOS (Intel, Apple Silicon)
- ✅ Linux (x64, arm64)
- 🔄 iOS / Android(Tauri v2 正式支持移动端)
4.4 构建与分发
- 内置打包工具,自动生成各平台安装包(.exe/.msi/.dmg/.deb/.AppImage)
- 支持自动更新(updater 插件)
- CI/CD 友好,提供 GitHub Actions 模板
5. 项目结构
my-tauri-app/
├── src/ # Rust 后端源码
│ ├── main.rs # 入口文件
│ ├── lib.rs # 命令定义
│ └── commands/ # 自定义命令模块
├── src-tauri/ # Tauri 配置与 Rust 代码(v2 结构)
│ ├── Cargo.toml # Rust 依赖
│ ├── tauri.conf.json # Tauri 配置
│ ├── capabilities/ # 权限声明
│ └── icons/ # 应用图标
├── app/ # 前端源码
│ ├── src/
│ └── package.json
└── package.json # 根工作区配置
6. 快速上手
环境准备
# 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 安装 Node.js (推荐 v18+)
# 安装系统依赖(Linux)
sudo apt install libwebkit2gtk-4.1-dev build-essential libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
创建项目
# Tauri v2
npm create tauri-app@latest my-app
cd my-app
npm install
npm run tauri dev
前后端通信示例
Rust 端定义命令:
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
前端调用:
import { invoke } from '@tauri-apps/api/core';
const message = await invoke('greet', { name: 'World' });
console.log(message); // "Hello, World!"
7. Tauri v2 重要变化
- 🆕 移动端支持:正式支持 iOS 和 Android
- 🔒 新权限系统:基于 capability 的细粒度权限控制
- 📦 插件重构:统一插件 API,更好的可扩展性
- 🌐 多 WebView:支持在一个应用中创建多个窗口/WebView
- ⚡ 性能优化:更快的 IPC、更小的二进制体积
8. 适用场景
✅ 推荐使用 Tauri 的场景:
- 对包体积和内存有严格要求的桌面应用
- 需要高安全性和系统级操作的工具类应用
- 团队已有 Rust 经验或愿意投入学习
- 需要同时支持桌面端和移动端
- CLI 工具配套 GUI
⚠️ 谨慎考虑的场景:
- 需要完整 Chromium API(如 WebRTC、PWA 高级特性)
- 团队完全无 Rust 经验且项目时间紧迫
- 依赖大量 Node.js 生态库且难以迁移
- 需要支持旧版 Windows(Win7 及以下)
9. 学习资源
- 官方文档:https://v2.tauri.app/
- GitHub:https://github.com/tauri-apps/tauri
- 插件市场:https://plugins.tauri.app/
- Awesome Tauri:https://github.com/tauri-apps/awesome-tauri
📅 总结时间:2025年 | 基于 Tauri v2.x