Chapter 01

Tauri 2.0 架构与生态

理解 WebView + Rust 双进程模型,掌握 Tauri 的设计哲学与核心优势

Electron 的问题

Electron 自 2013 年诞生以来,让 Web 开发者能够轻松构建桌面应用。但随着时间推移,它的几个固有缺陷日益突出:

体积臃肿
每个 Electron 应用都打包了完整的 Chromium 浏览器内核(约 150MB)和 Node.js 运行时。一个简单的"Hello World"应用安装包超过 50MB,实际应用动辄 200MB 以上。
内存占用高
Chromium 多进程架构使每个 Electron 应用启动时就占用 100-300MB 内存。同时打开 VS Code、Slack、Discord 等 Electron 应用,内存消耗可达数 GB。
安全模型薄弱
早期 Electron 应用 Node.js 直接注入 WebView,前端代码可调用任意 Node.js API,XSS 漏洞即可导致整个系统被攻陷。
启动慢
冷启动需要初始化完整的 Chromium 渲染引擎,在低端机器上等待 3-5 秒很常见。
更新困难
Chromium 版本固化在应用内,安全补丁需要整个应用重新发布,无法利用用户系统自带的浏览器安全更新。

Tauri 的解决方案

Tauri 由 Daniel Thompson-Yvetot 和 Lucas Nogueira 于 2019 年发起,核心理念是:用系统原生 WebView 替代内嵌 Chromium,用 Rust 替代 Node.js 作为后端

┌─────────────────────────────────────────┐ │ Tauri 应用进程模型 │ │ │ │ ┌─────────────────┐ IPC Bridge │ │ │ 前端(Web) │ ←──────────────→ │ │ │ React/Vue/等 │ │ │ │ │ Commands │ │ │ 系统 WebView │ Events │ │ │ WKWebView(Mac) │ │ │ │ WebView2(Win) │ ┌──────────────┐ │ │ │ GTK WebKit(Li) │ │ Rust 核心 │ │ │ └─────────────────┘ │ 系统 API │ │ │ │ 文件/网络等 │ │ │ └──────────────┘ │ └─────────────────────────────────────────┘

WebView 跨平台差异

macOS / iOS
WKWebView(WebKit 引擎)。Apple 平台内置,性能优秀,支持最新 Web 标准。Safari 技术预览版通常领先 Chrome 实现新 API。
Windows
WebView2(基于 Chromium 的 Edge 引擎)。Windows 10/11 系统自带,与最新 Chrome 兼容性极好。Windows 7/8 需要单独安装 WebView2 Runtime。
Linux
WebKitGTK(WebKit 引擎的 GTK 绑定)。各发行版版本差异较大,需注意 CSS/JS 兼容性,通常比 macOS WebKit 落后一些。
Android
Android 系统的 WebView(基于 Chromium)。Tauri 2.0 新增支持,通过 Capacitor 风格的 Android 项目结构实现。
WebView 兼容性注意

由于不同平台 WebView 版本不同,某些较新的 CSS 特性(如 container queries:has())或 JavaScript API 在 Linux/旧版 Windows 上可能不可用。建议在目标平台上充分测试,或使用 polyfill。

Tauri vs 竞品对比

特性 Tauri 2.0 Electron Wails v2 NW.js
后端语言 Rust Node.js Go Node.js
WebView 系统原生 内嵌 Chromium 系统原生 内嵌 Chromium
安装包大小 ~3-10 MB ~150-300 MB ~5-15 MB ~100-200 MB
内存占用 低(~30MB) 高(~100MB+) 低(~40MB) 高(~100MB+)
移动端支持 iOS + Android
安全模型 Capability-based Node.js 集成 绑定模型 Node.js 集成
前端框架 任意 任意 任意 任意
生态成熟度 成长中 非常成熟 成长中 成熟

Tauri 1.x vs 2.0 的变化

移动端目标
2.0 最重要的新特性——支持编译为 iOS 和 Android 应用,一套代码覆盖桌面和移动端。
Capability 权限系统
全新的基于能力的权限模型,替代 1.x 的 allowlist 配置。更细粒度的 API 访问控制,每个窗口和插件独立配置权限。
插件系统重构
核心 API 拆分为独立插件(plugin-fs、plugin-http、plugin-notification 等),按需引入,减小打包体积。
多窗口改进
新的 WebviewWindow API 更直观,支持窗口间通信,父子窗口关系管理更清晰。
Swift/Kotlin 插件
移动端插件支持 Swift(iOS)和 Kotlin(Android)原生代码,可调用平台专属 API。

安全模型:Capability-based

Tauri 2.0 采用基于能力(Capability)的安全模型,默认情况下前端代码无法访问任何系统 API,必须在配置中显式声明权限:

// src-tauri/capabilities/default.json
{
  "identifier": "default",
  "description": "Default capabilities for the main window",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "fs:allow-read-text-file",
    "fs:allow-write-text-file",
    "dialog:allow-open",
    "dialog:allow-save"
  ]
}
最小权限原则

只授予应用实际需要的权限。每个权限都有对应的文档说明其作用范围。比如 fs:allow-read-text-file 只允许读取文本文件,不能读取二进制文件,也不能写入——这种细粒度控制是 Tauri 相比 Electron 的重要安全优势。

环境安装

系统依赖

# macOS(安装 Xcode Command Line Tools)
xcode-select --install

# Ubuntu/Debian
sudo apt update && sudo apt install -y \
  libwebkit2gtk-4.1-dev \
  build-essential \
  curl \
  wget \
  file \
  libxdo-dev \
  libssl-dev \
  libayatana-appindicator3-dev \
  librsvg2-dev

# Windows:安装 Visual Studio Build Tools(含 C++ 工作负载)
# 从 https://visualstudio.microsoft.com/downloads/ 下载

安装 Rust

# 安装 rustup(Rust 工具链管理器)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

# 验证安装
rustc --version   # rustc 1.82.0 或更高
cargo --version   # cargo 1.82.0 或更高

安装 Node.js 与 Tauri CLI

# 推荐使用 fnm 管理 Node.js 版本
curl -fsSL https://fnm.vercel.app/install | bash
fnm install --lts
fnm use lts-latest

# 安装 Tauri CLI(npm 方式,推荐)
npm install -g @tauri-apps/cli@latest

# 验证
tauri --version   # tauri-cli 2.x.x

# 也可以用 cargo 安装(纯 Rust 方式)
cargo install tauri-cli --version "^2"

移动端额外依赖(可选)

# iOS 开发(仅 macOS)
# 需要 Xcode 14+ 和 iOS 模拟器
rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim

# Android 开发
# 需要 Android Studio + NDK
rustup target add \
  aarch64-linux-android \
  armv7-linux-androideabi \
  i686-linux-android \
  x86_64-linux-android

# 设置 ANDROID_HOME 和 NDK_HOME 环境变量
export ANDROID_HOME="$HOME/Android/Sdk"
export NDK_HOME="$ANDROID_HOME/ndk/$(ls -1 $ANDROID_HOME/ndk | tail -n1)"
推荐使用 Tauri 官方 prerequisites 检查工具

运行 cargo tauri info(在项目目录内)可以自动检查所有依赖是否正确安装,并列出当前系统信息、Rust 版本、前端构建工具版本等诊断信息,是排查环境问题的首选工具。

Tauri 架构深度解析

Tauri 2.0 架构图 ┌─────────────────────────────────────────────────────────┐ │ Tauri 应用进程 │ │ │ │ ┌──────────────────────────────┐ │ │ │ WebView(系统内置) │ │ │ │ ┌────────────────────────┐ │ │ │ │ │ 前端代码(React/Vue) │ │ │ │ │ │ HTML + CSS + JS │ │ │ │ │ └────────────────────────┘ │ │ │ │ ↕ IPC(invoke/emit) │ │ │ └──────────────────────────────┘ │ │ ↕ │ │ ┌──────────────────────────────┐ │ │ │ Rust Core(后端) │ │ │ │ ┌────────────┐ ┌─────────┐ │ │ │ │ │ Commands │ │ Plugins │ │ │ │ │ │ (invoke) │ │ (fs/http│ │ │ │ │ └────────────┘ └─────────┘ │ │ │ │ ↕ 直接调用系统 API │ │ │ └──────────────────────────────┘ │ │ ↕ │ │ ┌──────────────────────────────┐ │ │ │ 操作系统(Windows/macOS/Linux)│ │ │ │ 文件系统 / 网络 / 通知 / etc. │ │ │ └──────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘

WebView 引擎对比

WKWebView(macOS/iOS)
Apple 的 WebKit 引擎,随 macOS/iOS 系统预装。性能优秀,Safari 渲染引擎。不支持某些 Chrome 专有特性(如 SharedArrayBuffer 在某些配置下)。
WebView2(Windows)
Microsoft 基于 Chromium 的 WebView 引擎,自 Windows 10 21H1 起系统预装。渲染效果与 Chrome 基本一致。Tauri 检测到未安装时会提示用户安装。
WebKitGTK(Linux)
GTK 版本的 WebKit,在各 Linux 发行版上版本差异较大。是 Tauri 在 Linux 下 WebView 差异最明显的平台,需要用户安装 webkit2gtk 包。
跨平台兼容性注意事项

本章小结

本章核心要点