Tauri 基础知识参考字典

Tauri 2 条目式速查字典。概念见《Tauri 是什么》,实战见《Tauri 2 架构入门》。

1. 三进程模型

描述

主进程(Rust 核心)+ WebView 进程(系统 WebView 跑前端)+ 可选辅助;不捆 Chromium。

平台WebView
WindowsWebView2(Edge 内核)
macOSWKWebView
LinuxWebKitGTK 4.1(Tauri 2.x 起要求)

2. tauri.conf.json 结构

描述

v2 用 app.windows 数组(v1 是 tauri.window 单对象);bundle 定打包目标。

语法和示例

{
  "productName": "my-app",
  "identifier": "com.example.app",
  "build": { "frontendDist": "../dist", "devUrl": "http://localhost:5173" },
  "app": {
    "windows": [{ "title": "主窗口", "width": 960, "height": 640 }],
    "security": { "csp": "default-src 'self'" }
  },
  "bundle": { "targets": ["dmg", "msi", "appimage"] }
}

3. #[tauri::command]

描述

Rust 侧暴露给前端的函数;注册进 invoke_handler;支持 State/Result。

语法和示例

#[tauri::command]
fn greet(name: String) -> String { format!("你好, {name}!") }

#[tauri::command]
async fn load(state: tauri::State<AppState>) -> Result<Vec<Item>, String> {
    state.fetch().await.map_err(|e| e.to_string())
}

tauri::Builder::default()
    .manage(AppState::default())
    .invoke_handler(tauri::generate_handler![greet, load])
    .run(tauri::generate_context!())?;

4. invoke 前端调用

描述

@tauri-apps/api/core 的 invoke;参数名对驼峰自动映射。

语法和示例

import { invoke } from '@tauri-apps/api/core';
const msg: string = await invoke('greet', { name: 'X' });
const items = await invoke<Item[]>('load');   // 泛型给返回类型

5. emit / listen 事件

描述

双向事件;Rust 用 app.emit,前端 listen 返回 unlisten 需清理。

语法和示例

// Rust: app.emit("progress", json!({"pct": 10}))?;
import { emit, listen } from '@tauri-apps/api/event';
useEffect(() => {
  let un: (() => void) | undefined;
  listen<{pct:number}>('progress', (e) => setPct(e.payload.pct))
    .then(fn => { un = fn; });
  return () => un?.();
}, []);

6. capabilities 权限模型

描述

v2 默认最小权限;插件能力必须在 capabilities/*.json 声明——报 not allowed 先查这里。

语法和示例

// src-tauri/capabilities/default.json
{
  "identifier": "default",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "dialog:default",
    "fs:allow-read-text-file"
  ]
}

7. 官方插件三步装

描述

Rust 依赖 + npm 包 + 权限声明,缺一不可。

语法和示例

cargo add tauri-plugin-dialog
npm i @tauri-apps/plugin-dialog
1. 再在 capabilities/default.json 加 "dialog:default"

8. 窗口管理

描述

Rust 侧 WebviewWindowBuilder 建多窗;前端 getCurrentWindow 控制。

语法和示例

import { getCurrentWindow } from '@tauri-apps/api/window';
getCurrentWindow().setTitle('新标题');
getCurrentWindow().close();
// Rust: WebviewWindowBuilder::new(&app, "settings", WebviewUrl::App("settings".into()))

9. 菜单与托盘

描述

macOS 必须显式建菜单否则无编辑菜单;托盘用 TrayIconBuilder。

语法和示例

tauri::Builder::default()
    .menu(tauri::menu::Menu::default(&handle)?)
    .on_menu_event(|app, e| match e.id().as_ref() {
        "quit" => app.exit(0), _ => {}
    })
    .setup(|app| {
        tauri::tray::TrayIconBuilder::new()
            .icon(app.default_window_icon().unwrap().clone())
            .build(app)?;
        Ok(())
    })

10. 自动更新(updater)

描述

签名密钥对 + latest.json 清单 + 权限;macOS 需 notarize。

事项要点
生成密钥tauri signer generate(公钥进 conf,私钥进环境变量
清单latest.json:version/pub_date/signature/platforms.url
权限capabilities 加 updater:default
macOS分发需 notarize,否则更新校验失败

11. IPC 大数据

描述

传 ArrayBuffer 走 tauri::ipc::Response,别 JSON 序列化大块。

语法和示例

#[tauri::command]
fn blob() -> tauri::ipc::Response {
    tauri::ipc::Response::new(bytes)   // 前端收 ArrayBuffer
}

12. 调试速查

描述

DevTools 快捷键;release 默认禁 devtools 需开 feature。

  • WebView DevTools:Ctrl+Shift+I(Linux/Win)
  • Rust 日志:tauri-plugin-log 或 env_logger
  • release 调试:Cargo.toml 加 devtools = [“tauri/devtools”]
  • 展开宏看代码:cargo expand

13. 构建生命周期

描述

脚手架 → dev 热重载 → build 产物在 bundle 目录。

语法和示例

npm create tauri-app@latest
npm run tauri dev
npm run tauri build      # 产物 src-tauri/target/release/bundle/
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇