tauri-skills

Installation
SKILL.md

Tauri v2 桌面应用开发技能

技能概述

Tauri 是一个用 Rust 构建的轻量级桌面应用框架,使用 Web 前端技术(HTML、CSS、JavaScript/TypeScript)作为 UI 层,结合 Rust 后端实现高性能原生应用。

核心特性

  • 轻量级:二进制文件体积小(~10MB)
  • 高性能:Rust 后端,原生性能
  • 安全:基于权限的沙箱安全模型
  • 跨平台:支持 Windows、macOS、Linux
  • 双端统一:前端与 Rust 后端无缝通信

快速开始

安装

# 安装 Tauri CLI
npm install -D @tauri-apps/cli@latest

# 创建新项目
npm create tauri-app@latest my-app
cd my-app
npm install

# 启动开发服务器
npm run tauri dev

# 构建生产版本
npm run tauri build

项目结构

my-app/
├── src/                  # 前端源码
│   ├── main.ts
│   └── App.vue
├── src-tauri/           # Rust 后端源码
│   ├── src/
│   │   └── main.rs
│   ├── Cargo.toml
│   └── tauri.conf.json
├── package.json
└── vite.config.ts

文档索引

入门指南

文档 说明
快速开始 安装和项目创建
Rust 后端 命令定义和调用
权限系统 Capability 配置

常用功能示例

功能 说明
文件对话框 打开/保存文件
系统通知 发送通知
HTTP 请求 网络请求
剪贴板 读写剪贴板
Shell 命令 打开外部链接

完整 API 参考

类别 数量 位置
JavaScript 命名空间 12 reference/javascript-api/
JavaScript 插件模块 26 reference/javascript-modules/
权限系统文档 4 reference/acl/

配置参考

文档 说明
config tauri.conf.json 配置
cli CLI 命令
environment-variables 环境变量
webview-versions WebView 版本

权限系统

Tauri 2.0 采用基于权限的安全模型。

Capability

Capability 定义了应用的能力边界:

{
  "identifier": "main-capability",
  "description": "Main window capability",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "dialog:default",
    "fs:default"
  ]
}

详细文档:capability

权限分类

  • core: 核心权限
  • dialog: 对话框权限
  • fs: 文件系统权限
  • shell: Shell 权限
  • http: HTTP 请求权限
  • notification: 通知权限

详细文档:permission


配置

tauri.conf.json

{
  "productName": "My App",
  "identifier": "com.myapp.app",
  "version": "1.0.0",
  "build": {
    "beforeDevCommand": "npm run dev",
    "devUrl": "http://localhost:5173",
    "beforeBuildCommand": "npm run build",
    "frontendDist": "../dist"
  },
  "app": {
    "withGlobalTauri": true,
    "windows": [
      {
        "title": "My App",
        "width": 800,
        "height": 600,
        "resizable": true,
        "fullscreen": false
      }
    ],
    "security": {
      "csp": null
    }
  },
  "bundle": {
    "active": true,
    "targets": "all",
    "icon": [
      "icons/32x32.png",
      "icons/128x128.png"
    ]
  }
}

详细配置说明:config


Rust 后端

命令定义

use tauri::command;

#[derive(Serialize)]
struct User {
    id: u32,
    name: String,
}

#[command]
fn greet(name: &str) -> String {
    format!("Hello, {}!", name)
}

#[command]
fn get_user(id: u32) -> Result<User, String> {
    Ok(User { id, name: "John".to_string() })
}

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet, get_user])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

前端调用

import { invoke } from '@tauri-apps/api/core';

const greeting = await invoke('greet', { name: 'World' });
console.log(greeting); // "Hello, World!"

const user = await invoke<{ id: number; name: string }>('get_user', { id: 1 });
console.log(user.name); // "John"

最佳实践

1. 权限配置

{
  "identifier": "my-capability",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "dialog:allow-open",
    "dialog:allow-save",
    "fs:allow-read-text-file",
    "fs:allow-write-text-file",
    "notification:default"
  ]
}

2. 错误处理

import { invoke } from '@tauri-apps/api/core';

try {
  const result = await invoke('my_command');
} catch (error) {
  console.error('Error:', error);
}

3. 事件通信

import { listen, emit } from '@tauri-apps/api/event';

await listen('my-event', (event) => {
  console.log('Received:', event.payload);
});

await emit('my-event', { data: 'hello' });

4. 窗口管理

import { getCurrentWindow } from '@tauri-apps/api/window';

const win = getCurrentWindow();

await win.setTitle('New Title');
await win.minimize();
await win.setFullscreen(true);

常见问题

Q1: 如何调试 Tauri 应用?

使用开发者工具:

npm run tauri dev -- --inspect-brk

Q2: 如何处理跨域问题?

tauri.conf.json 中配置 CSP 或使用 Tauri 的 HTTP 插件。

Q3: 如何实现自动更新?

使用 @tauri-apps/plugin-updater 插件,详细文档:updater

Q4: 如何打包发布?

npm run tauri build

生成的文件在 src-tauri/target/release/bundle/ 目录下。


参考资源

Related skills
Installs
2
First Seen
Apr 4, 2026