告别 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   │
└─────────────────────────────────┘

3. 与 Electron 的对比

特性TauriElectron
后端语言RustNode.js
打包体积~2-6 MB~80-150 MB
内存占用低较高
安全性更高(Rust + 权限系统)一般
生态成熟度成长中非常成熟
学习曲线需了解 Rust仅需 JS/TS
渲染引擎系统 WebViewChromium
许可证MIT / Apache 2.0MIT

4. 核心特性

4.1 安全性

4.2 插件系统

4.3 跨平台支持

4.4 构建与分发


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 重要变化


8. 适用场景

✅ 推荐使用 Tauri 的场景:

⚠️ 谨慎考虑的场景:


9. 学习资源


📅 总结时间:2025年 | 基于 Tauri v2.x