Tauri介绍

Tauri 是一个现代的框架,用于构建轻量级、安全的跨平台桌面应用程序。它结合了 Rust 的强大功能和 Web 技术(HTML、CSS 和 JavaScript),提供了一种高效的方式来开发桌面应用。以下是 Tauri 的详细说明,包括其架构、优势、安装、创建项目、开发和部署等方面。

Tauri 是一个现代的框架,用于构建轻量级、安全的跨平台桌面应用程序。它结合了 Rust 的强大功能和 Web 技术(HTML、CSS 和 JavaScript),提供了一种高效的方式来开发桌面应用。以下是 Tauri 的详细说明,包括其架构、优势、安装、创建项目、开发和部署等方面。

Tauri 架构

Tauri 架构主要由以下几个部分组成:

  1. Rust 后端:使用 Rust 编写,负责与操作系统交互、处理系统事件、安全控制和 API 调用。
  2. Web 前端:使用 Web 技术(HTML、CSS 和 JavaScript)创建用户界面,可以基于任何前端框架(如 React、Vue 或 Svelte)。
  3. Tauri API:Rust 后端提供的一组 API,用于与前端进行通信,实现前后端的数据交换和功能调用。
  4. 包装器:一个轻量级的嵌入式 Webview,用于展示前端界面并与 Rust 后端交互。

Tauri 的优势

  1. 可靠的基础:由于 Tauri 是使用 Rust 构建的,它可以利用 Rust 提供的内存、线程和类型安全方面的优势。Tauri 的每一个主要和次要版本都会接受安全审计,确保应用的安全性 。
  2. 更小的体积:Tauri 利用了已经存在于每一个用户系统的 Webview。Tauri 应用中只包含了该应用专属的代码和资源文件,不需要在每个应用中都打包一个浏览器引擎,这意味着一个最小化的 Tauri 应用体积可能小于 600KB 。
  3. 灵活的架构:由于 Tauri 使用了 Web 技术,这也意味着几乎所有的前端框架都与 Tauri 兼容。开发者可以在 JavaScript 中使用 invoke 函数实现 JavaScript 与 Rust 绑定,而 Swift 和 Kotlin 绑定则是作为 Tauri 插件 。

创建 Tauri 项目

要创建一个新的 Tauri 项目,你可以使用 create-tauri-app 命令。这个命令为原生 HTML/CSS/JavaScript 及如 React、Svelte 和 Yew 一类的框架提供了脚手架模板。以下是创建项目的命令:

sh <(curl https://create.tauri.app/sh)

创建项目后,你可以在 src-tauri 目录中找到 Rust 源码,这是 Tauri 应用的后端部分。前端代码则位于 src 目录中 。

开发 Tauri 应用

在开发 Tauri 应用时,你可以使用任何你喜欢的前端框架。Tauri 提供了一套 API,允许前端 JavaScript 代码与 Rust 后端进行通信。例如,你可以使用 tauri::api::shell 模块来执行系统命令,或者使用 tauri::api::path 模块来处理文件路径。

部署 Tauri 应用

部署 Tauri 应用时,你需要构建应用的二进制文件。Tauri 使用系统原生的 Webview,这意味着你的应用可以打包为一个非常小的二进制文件。构建命令通常如下:

cargo build --release

构建完成后,你可以在 target/release 目录中找到应用的二进制文件。

代码示例

以下是一个简单的 Tauri 应用示例,其中包含了前端和后端的基本代码。

前端(JavaScript/TypeScript):

// main.tsx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

后端(Rust):

// src/main.rs
#[macro_use]
extern crate tauri;

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![handle_command])
        .build()
        .expect("error while building tauri application")
        .run();
}

fn handle_command(window: tauri::Window, cmd: String) {
    // Handle command from frontend
    println!("Received command: {}", cmd);
}

在这个示例中,前端使用 React 创建了一个简单的用户界面,而后端使用 Rust 处理前端发送的命令。通过 Tauri 的 API,前端可以调用 handle_command 函数来执行特定的操作 。

总的来说,Tauri 提供了一种现代、高效的方式来构建跨平台的桌面应用程序,同时保持了应用的安全性和轻量级。通过结合 Rust 和 Web 技术,Tauri 为开发者提供了强大的工具来创建高性能的应用程序。

Tauri 对比 Electron

维度TauriElectron
安装包大小~3-5 MB~150-200 MB
内存占用低(原生前端 + Rust 后端)高(包含完整 Chromium)
启动速度快慢(需加载 Chromium)
更新策略支持增量更新(delta update)完整包下载
前端框架Vue、React、Svelte 任意选择任意选择
学习曲线需了解 Rust仅需 Node.js

何时选 Tauri:对安装包大小敏感、内存资源受限、需要极致启动速度的场景。
何时选 Electron:团队无 Rust 经验、依赖 Node.js 原生模块生态、需要快速开发 MVP。

Tauri 的安全模型

Tauri 比 Electron 更安全的核心原因:

  • Capability-based access:API 权限需显式声明(tauri.conf.json 中的 allowlist),默认拒绝所有
  • 进程隔离:WebView 与 Rust 后端通过 IPC 通信,前端无法直接访问文件系统
  • TLS 验证:HTTPS 请求强制验证证书,防止中间人攻击
  • Content Security Policy:内置 CSP 配置,防御 XSS 攻击
// tauri.conf.json — 最小权限原则
{
  "tauri": {
    "allowlist": {
      "fs": { "readFile": true, "scope": [ "$APPDATA/*" ] },
      "http": { "request": true, "scope": [ "https://api.example.com" ] }
    }
  }
}

Tauri 的权限模型类似于 Android 的运行时权限——用户明确知道应用能做什么,且无法超出声明范围。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页