官方插件
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 |