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