CLAUDE.md@by-framework/tauri · git:20260320.fcf2609 · 2026-03-20 · sha256 4bc8765b4acd87a2
CLAUDE.md@by-framework/tauri git:20260320.fcf2609A
Immutable. This exact content is served forever at /api/v1/blob/4bc8765b4acd87a2.
# Tauri 桌面应用项目
## 技术栈
- Tauri 2 框架:Rust 后端 + Web 前端
- 前端:任意框架(React/Vue/Svelte/纯 HTML)
- Rust:处理系统级操作、文件 IO、原生功能
- 构建工具:Cargo(Rust)+ 前端构建工具(Vite 等)
## 项目结构
```
src-tauri/
src/
main.rs # 应用入口,配置窗口和插件
lib.rs # Tauri command 定义
Cargo.toml # Rust 依赖
tauri.conf.json # Tauri 配置(窗口大小、权限、打包等)
capabilities/ # 权限声明文件
src/ # 前端代码目录
```
## Tauri Commands(Rust <-> JS 通信)
- Rust 端用 `#[tauri::command]` 宏定义,`main.rs` 中 `invoke_handler![cmd1, cmd2]` 注册
- 前端:`import { invoke } from '@tauri-apps/api/core'`,`await invoke('cmd_name', { arg })`
- 参数自动序列化/反序列化(Rust 使用 serde),命令名统一 snake_case
## 事件系统
- 前端到后端:`emit('event-name', payload)`
- 后端到前端:`app_handle.emit("event-name", payload)`
- 前端监听:`listen('event-name', (event) => { ... })`
- 适用于后端主动推送数据(如进度更新、文件监听回调)
## Rust 开发规范
- 使用 `Result<T, E>` 处理错误,command 返回 `Result<T, String>` 或自定义错误类型
- 文件操作用 `std::fs`,异步操作用 `tokio`
- 状态管理用 `tauri::Manager` 的 `manage()` 注入,command 中通过 `State<>` 获取
- 敏感操作(文件系统、Shell 等)需在 `capabilities/` 中声明权限
## 前端开发规范
- 使用 `@tauri-apps/api` 访问系统 API,`window.__TAURI_INTERNALS__` 判断运行环境
- 窗口操作:`@tauri-apps/api/window`,文件对话框:`@tauri-apps/plugin-dialog`
## 常用命令
```bash
npm run tauri dev # 启动开发模式(同时启动前端和 Rust 后端)
npm run tauri build # 构建生产包(生成安装包)
cargo test # 运行 Rust 单元测试(在 src-tauri/ 下)
cargo clippy # Rust 代码检查
```
## 构建与打包
- macOS 输出 `.dmg`,Windows 输出 `.msi`/`.exe`,Linux 输出 `.deb`/`.AppImage`
- 交叉编译需配置 CI(GitHub Actions 官方模板可用)
- 更新机制使用 `@tauri-apps/plugin-updater`,需配置签名密钥
## 常见陷阱
- Tauri 2 与 Tauri 1 API 不兼容,注意文档版本
- Rust 编译首次较慢(下载+编译依赖),后续增量编译快
- `tauri.conf.json` 中的 `identifier` 必须唯一(反向域名格式)
- 前端资源路径需使用 `asset:` 协议或 `convertFileSrc()` 转换本地文件路径
- Windows 下路径分隔符差异,Rust 中用 `std::path::PathBuf` 处理