跳到主要内容

官方插件

Tauri 提供了丰富的官方插件,扩展应用功能。这些插件涵盖了文件系统、网络、通知、数据库等常见需求。

插件安装方式

Tauri 2.0 的插件分为 Rust 端和 JavaScript 端,需要分别安装。

安装 Rust 插件

cargo add tauri-plugin-[plugin-name]

安装 JavaScript 插件

npm install @tauri-apps/plugin-[plugin-name]

注册插件

src-tauri/src/lib.rs 中:

pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_[name]::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

常用插件

文件系统插件 (fs)

已内置在 Tauri 核心中,无需额外安装。

import { readTextFile, writeTextFile, BaseDirectory } from "@tauri-apps/api/fs";

// 读取文件
const content = await readTextFile("config.json", {
baseDir: BaseDirectory.AppData
});

// 写入文件
await writeTextFile("notes.txt", "内容", {
baseDir: BaseDirectory.Document
});

对话框插件 (dialog)

已内置在 Tauri 核心中。

import { open, save, message, confirm } from "@tauri-apps/api/dialog";

// 打开文件
const selected = await open({
filters: [{ name: "图片", extensions: ["png", "jpg"] }]
});

// 保存文件
const savePath = await save({
defaultPath: "untitled.txt"
});

// 消息对话框
await message("操作成功", { type: "info" });

// 确认对话框
const yes = await confirm("确定删除?");

HTTP 客户端插件 (http)

安装:

cargo add tauri-plugin-http
npm install @tauri-apps/plugin-http

配置权限:

{
"permissions": [
"http:default",
{
"identifier": "http:allow-fetch",
"allow": [{ "url": "https://api.example.com" }]
}
]
}

使用:

import { fetch } from "@tauri-apps/plugin-http";

// GET 请求
const response = await fetch("https://api.example.com/data", {
method: "GET",
headers: {
"Content-Type": "application/json"
}
});
const data = await response.json();

// POST 请求
const postResponse = await fetch("https://api.example.com/users", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ name: "张三", age: 25 })
});

通知插件 (notification)

安装:

cargo add tauri-plugin-notification
npm install @tauri-apps/plugin-notification

配置权限:

{
"permissions": ["notification:default"]
}

使用:

import { 
isPermissionGranted,
requestPermission,
sendNotification
} from "@tauri-apps/plugin-notification";

// 检查并请求权限
let permissionGranted = await isPermissionGranted();
if (!permissionGranted) {
const permission = await requestPermission();
permissionGranted = permission === "granted";
}

// 发送通知
if (permissionGranted) {
sendNotification({
title: "新消息",
body: "您有一条新的通知",
icon: "icons/icon.png"
});
}

剪贴板插件 (clipboard-manager)

安装:

cargo add tauri-plugin-clipboard-manager
npm install @tauri-apps/plugin-clipboard-manager

配置权限:

{
"permissions": ["clipboard-manager:default"]
}

使用:

import { writeText, readText } from "@tauri-apps/plugin-clipboard-manager";

// 写入剪贴板
await writeText("要复制的文本");

// 读取剪贴板
const text = await readText();
console.log("剪贴板内容:", text);

存储插件 (store)

用于持久化存储键值对数据。

安装:

cargo add tauri-plugin-store
npm install @tauri-apps/plugin-store

配置权限:

{
"permissions": ["store:default"]
}

使用:

import { Store } from "@tauri-apps/plugin-store";

// 创建或加载存储
const store = new Store("store.bin");

// 设置值
await store.set("userName", "张三");
await store.set("settings", {
theme: "dark",
language: "zh-CN"
});

// 获取值
const userName = await store.get("userName");
const settings = await store.get("settings");

// 删除值
await store.delete("tempData");

// 清空存储
await store.clear();

// 保存到磁盘(自动保存也可配置)
await store.save();

日志插件 (log)

安装:

cargo add tauri-plugin-log
npm install @tauri-apps/plugin-log

Rust 配置:

use tauri_plugin_log::{Target, TargetKind};

pub fn run() {
tauri::Builder::default()
.plugin(
tauri_plugin_log::Builder::new()
.targets([
Target::new(TargetKind::Stdout),
Target::new(TargetKind::LogDir { file_name: None }),
Target::new(TargetKind::Webview),
])
.build()
)
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

前端使用:

import { trace, debug, info, warn, error } from "@tauri-apps/plugin-log";

// 不同级别的日志
trace("跟踪信息");
debug("调试信息");
info("普通信息");
warn("警告信息");
error("错误信息");

SQL 插件 (sql)

支持 SQLite 数据库。

安装:

cargo add tauri-plugin-sql --features sqlite
npm install @tauri-apps/plugin-sql

配置权限:

{
"permissions": ["sql:default"]
}

使用:

import Database from "@tauri-apps/plugin-sql";

// 连接数据库
const db = await Database.load("sqlite:test.db");

// 创建表
await db.execute(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
)
`);

// 插入数据
await db.execute(
"INSERT INTO users (name, email) VALUES ($1, $2)",
["张三", "[email protected]"]
);

// 查询数据
const users = await db.select("SELECT * FROM users");
console.log(users);

// 更新数据
await db.execute(
"UPDATE users SET name = $1 WHERE id = $2",
["李四", 1]
);

// 删除数据
await db.execute("DELETE FROM users WHERE id = $1", [1]);

进程插件 (process)

安装:

cargo add tauri-plugin-process
npm install @tauri-apps/plugin-process

使用:

import { exit, relaunch } from "@tauri-apps/plugin-process";

// 退出应用
await exit(0);

// 重启应用
await relaunch();

OS 信息插件 (os)

安装:

cargo add tauri-plugin-os
npm install @tauri-apps/plugin-os

使用:

import { 
platform,
version,
family,
arch,
exeExtension,
hostname,
locale
} from "@tauri-apps/plugin-os";

// 获取操作系统信息
console.log("平台:", platform()); // "windows" | "macos" | "linux"
console.log("版本:", version()); // 系统版本
console.log("家族:", family()); // "unix" | "windows"
console.log("架构:", arch()); // "x86_64" | "aarch64"
console.log("主机名:", hostname()); // 计算机名
console.log("语言:", locale()); // "zh-CN"

上传插件 (upload)

安装:

cargo add tauri-plugin-upload
npm install @tauri-apps/plugin-upload

使用:

import { upload } from "@tauri-apps/plugin-upload";

// 上传文件
await upload("https://api.example.com/upload", "/path/to/file.zip",
(progress, total) => {
const percent = (progress / total) * 100;
console.log(`上传进度: ${percent.toFixed(1)}%`);
},
{
"Authorization": "Bearer token"
}
);

自动启动插件 (autostart)

安装:

cargo add tauri-plugin-autostart
npm install @tauri-apps/plugin-autostart

使用:

import { enable, disable, isEnabled } from "@tauri-apps/plugin-autostart";

// 检查是否已启用
const enabled = await isEnabled();
console.log("开机自启:", enabled);

// 启用开机自启
await enable();

// 禁用开机自启
await disable();

全局快捷键插件 (global-shortcut)

安装:

cargo add tauri-plugin-global-shortcut
npm install @tauri-apps/plugin-global-shortcut

配置权限:

{
"permissions": ["global-shortcut:default"]
}

使用:

import { register, unregister } from "@tauri-apps/plugin-global-shortcut";

// 注册快捷键
await register("CommandOrControl+Shift+C", (shortcut) => {
console.log(`快捷键触发: ${shortcut}`);
// 执行操作,如显示/隐藏窗口
});

// 注销快捷键
await unregister("CommandOrControl+Shift+C");

窗口状态插件 (window-state)

自动保存和恢复窗口位置和大小。

安装:

cargo add tauri-plugin-window-state

使用:

pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_window_state::Builder::default().build())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

无需前端代码,插件自动工作。

插件选择建议

需求推荐插件
文件读写内置 fs
对话框内置 dialog
HTTP 请求http
系统通知notification
剪贴板clipboard-manager
数据存储store / sql
日志记录log
开机自启autostart
全局快捷键global-shortcut
文件上传upload
系统信息os

下一步