tauri-v2
npx skills add https://github.com/cruldra/skills --skill tauri-v2
Agent 安装分布
Skill 文档
Tauri v2 Agent
æ¬æè½æä¾ Tauri v2 项ç®çå ¨é¢å¼åæ¯æï¼å æ¬ CLI æä½ãæ¶æè®¾è®¡ãå®å ¨å®è·µåé¨ç½²çç¥ã
使ç¨åºæ¯
- 项ç®å建: 使ç¨
create-tauri-appææå¨åå§åæ°é¡¹ç® - CLI 管ç: æ§è¡å¼åãæå»ºãæå çå½ä»¤
- 代ç çæ: çæå½ä»¤ãç¶æç®¡çãé误å¤ççæ¨¡æ¿ä»£ç
- æ¶ææå¯¼: 项ç®ç»æè®¾è®¡ãåå端é信模å¼
- å®å ¨å®è·µ: æéé ç½®ãè¾å ¥éªè¯ãCSP 设置
- æ§è½ä¼å: æå»ºé ç½®ãèµæºç®¡çãç¼åçç¥
- é¨ç½²åå: CI/CD é ç½®ãèªå¨æ´æ°ãå¤å¹³å°æå»º
å¿«éåè
æ ¸å¿å½ä»¤
# åå»ºé¡¹ç® (èªå¨åç¯å¢ä¸å¿
须使ç¨é交äºå¼å½ä»¤)
# 注æï¼å¨ä½¿ç¨èªå¨åå·¥å
·ï¼å¦ Agentï¼åå»ºé¡¹ç®æ¶ï¼è¯·å
åç¨æ·æ¶é以ä¸åæ°ï¼
# 1. 项ç®åç§° (<PROJECTNAME>)
# 2. å
管çå¨ (--manager: pnpm, npm, yarn, cargo ç)
# 3. UI æ¨¡æ¿ (--template: react-ts, vue-ts, vanilla, svelte-ts ç)
# 4. å¯ä¸æ è¯ç¬¦ (--identifier: com.your.app)
# æ¶é宿¯åï¼ä½¿ç¨å¦ä¸é交äºå¼å½ä»¤å建ï¼
pnpm create tauri-app@latest <项ç®åç§°> --manager <å
管çå¨> --template <UI模æ¿> --identifier <å¯ä¸æ è¯ç¬¦> -y
# å¼å (建议å¨é¡¹ç®æ ¹ç®å½ä¸ä½¿ç¨å
管çå¨è¿è¡)
npm run tauri dev
# è¥ä½¿ç¨ pnpm å为: pnpm tauri dev
# æå»º
npm run tauri build
# æ·»å 宿¹æä»¶
npx tauri add fs
æä»¶ç»æ
project/
âââ src/ # å端代ç
âââ src-tauri/ # Rust å端
â âââ src/
â â âââ main.rs # å
¥å£
â â âââ commands.rs # å½ä»¤
â â âââ state.rs # ç¶æ
â â âââ error.rs # é误
â âââ capabilities/ # æéé
ç½®
â âââ tauri.conf.json # é
ç½®
è¯¦ç»æå
CLI 项ç®ç®¡ç
åè cli-management.md è·å宿´ç CLI ä½¿ç¨æåï¼
- å®è£ ä¸åå§å
- å¼åå½ä»¤ (
dev,android dev,ios dev) - æå»ºå½ä»¤ (
build,android build,ios build) - æå
å½ä»¤ (
bundle) - 常è§å·¥ä½æµåæ éæé¤
é ç½®æä»¶è§£æ
åè config-reference.md è·å tauri.conf.json ç详ç»è§£æä¸æåï¼
- åºç¡ä¿¡æ¯é ç½®
- æå»ºè¡ä¸º (
buildèç¹) - åºç¨çªå£ä¸å®å
¨ (
appèç¹) - 平尿å
é项 (
bundleèç¹) - æä»¶åæ°é
ç½® (
pluginsèç¹) - ç¯å¢åºåé ç½® (ç¹å®å¹³å°é ç½®)
- v1 è¿ç§»è³ v2 çé ç½®åæ´ç¹
æä½³å®è·µ
åè best-practices.md è·åæ¶æåå®å ¨æåï¼
- 项ç®ç®å½ç»æè§è
- å½ä»¤è®¾è®¡æ¨¡å¼
- ç¶æç®¡ç
- å®å ¨å®è·µ (æå°æéãè¾å ¥éªè¯ãCSP)
- é误å¤ç
- æ§è½ä¼å
- æµè¯çç¥
- æ¥å¿ä¸çæ§
- é¨ç½²ä¸åå
- å¹³å°ç¹å®å¤ç
常ç¨ä»£ç 模å¼
åºç¡å½ä»¤æ¨¡æ¿
use tauri::State;
use serde::{Deserialize, Serialize};
#[derive(Deserialize)]
pub struct Request {
data: String,
}
#[derive(Serialize)]
pub struct Response {
result: String,
}
#[tauri::command]
pub async fn my_command(
request: Request,
state: State<'_, AppState>,
) -> Result<Response, AppError> {
Ok(Response {
result: format!("Processed: {}", request.data),
})
}
å端è°ç¨å°è£
import { invoke } from '@tauri-apps/api/core';
export async function myCommand(data: string): Promise<string> {
try {
const response = await invoke<{ result: string }>('my_command', { data });
return response.result;
} catch (error) {
console.error('Command failed:', error);
throw new Error(`æä½å¤±è´¥: ${error}`);
}
}
é误类åå®ä¹
use thiserror::Error;
use serde::{Deserialize, Serialize};
#[derive(Error, Debug, Serialize, Deserialize)]
pub enum AppError {
#[error("IO é误: {0}")]
IoError(String),
#[error("æé被æç»")]
PermissionDenied,
#[error("æ æçè¾å
¥")]
InvalidInput,
}
æéé ç½®
{
"identifier": "default",
"permissions": [
"core:default",
{
"identifier": "fs:allow-read",
"allow": [{"path": "$APPDATA/*"}]
}
]
}
常è§é®é¢
æå»ºå¤±è´¥
- æ´æ° Rust:
rustup update - æ¸
çç¼å:
cargo clean - æ£æ¥ä¾èµ:
npm install
ç§»å¨å¼å
- iOS: éè¦ Xcodeï¼å¯ç¨ Web Inspector
- Android: éè¦ Android Studioï¼å¯ç¨ USB è°è¯
- çæºè°è¯: 设置
TAURI_DEV_HOSTç¯å¢åé
æ§è½é®é¢
- Release æå»ºé
ç½®
opt-level = "s" - 使ç¨è¿æ¥æ± ç®¡çæ°æ®åºè¿æ¥
- 弿¥æä½é¿å é»å¡ä¸»çº¿ç¨
- å端使ç¨èæå表å¤çå¤§æ°æ®
__cmd__ å®éå¤å®ä¹ (E0255)
çç¶: ç¼è¯æ¥é the name '__cmd__greet' is defined multiple times (E0255)
åå : #[tauri::command] å®å generate_handler! å®é½ä¼çæ __cmd__<fn_name> å
é¨å®ãå½ command 彿°ç´æ¥å®ä¹å¨ lib.rs æ main.rs ä¸ï¼ä¸å䏿件è°ç¨äº generate_handler! æ¶ï¼ä¸¤è
å¨åä¸ crate root ä½ç¨åå
产çå½åå²çªãè¿æ¯ Tauri å·²ç¥çæ¶æéå¶ï¼ææçæ¬ 1.x ~ 2.x ååå½±åï¼ã
è§£å³æ¹æ¡: å°ææ #[tauri::command] 彿°ç§»å°å模åä¸ï¼å¦ commands.rsï¼ï¼å¨ generate_handler! ä¸ä½¿ç¨å®æ´è·¯å¾å¼ç¨ï¼
// src-tauri/src/lib.rs (æ main.rs)
mod commands;
pub fn run() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![
commands::greet,
commands::open_link,
])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
注æ: å³ä½¿å½æ°ä¸å
pubï¼åªè¦å®å¸¦æ#[tauri::command]å¹¶ä¸ä¸generate_handler!å¨å䏿件ï¼å°±ä¼äº§çæ¤å²çªãå¡å¿ å§ç»å°å½ä»¤å½æ°æ¾å¨ç¬ç«å模åä¸ã