Tauri 插件系统允许扩展框架功能,创建可复用的模块:
插件架构
Tauri 插件由两部分组成:
- 前端部分:JavaScript/TypeScript API
- 后端部分:Rust 扩展
创建插件
1. 初始化插件项目
bashcargo create-tauri-plugin --name my-plugin
2. Rust 端实现
src-tauri/plugins/my-plugin/src/lib.rs:
rustuse tauri::{plugin::Plugin, Runtime}; #[tauri::command] async fn my_command(name: String) -> Result<String, String> { Ok(format!("Hello, {}!", name)) } pub struct MyPlugin<R: Runtime> { phantom: std::marker::PhantomData<R>, } impl<R: Runtime> Plugin<R> for MyPlugin<R> { fn name(&self) -> &'static str { "my_plugin" } fn initialize(&mut self, app: &tauri::AppHandle<R>, config: serde_json::Value) -> Result<(), Box<dyn std::error::Error>> { // 初始化逻辑 Ok(()) } } pub fn init<R: Runtime>() -> MyPlugin<R> { MyPlugin { phantom: std::marker::PhantomData, } }
3. 注册命令
rustimpl<R: Runtime> MyPlugin<R> { pub fn commands() -> Vec<Box<dyn tauri::command::CommandItem<R>>> { vec![ tauri::command::CommandItem::new(my_command) ] } }
4. 前端 API
src-tauri/plugins/my-plugin/src-js/index.ts:
typescriptimport { invoke } from '@tauri-apps/api/tauri'; export async function myCommand(name: string): Promise<string> { return invoke('plugin:my_plugin|my_command', { name }); }
5. 使用插件
在 tauri.conf.json 中配置:
json{ "plugins": { "my_plugin": { "enabled": true, "config": {} } } }
常用官方插件
tauri-plugin-clipboard
typescriptimport { writeText, readText } from 'tauri-plugin-clipboard-api'; await writeText('Hello'); const text = await readText();
tauri-plugin-fs-extra
typescriptimport { copyFile, moveFile } from 'tauri-plugin-fs-extra-api'; await copyFile('src.txt', 'dest.txt');
tauri-plugin-store
typescriptimport Store from 'tauri-plugin-store-api'; const store = new Store('.settings.dat'); await store.set('key', 'value'); const value = await store.get('key');
tauri-plugin-sql
typescriptimport Database from 'tauri-plugin-sql-api'; const db = await Database.load('sqlite:test.db'); const result = await db.select('SELECT * FROM users');
插件最佳实践
- 错误处理:使用
Result类型处理错误 - 异步操作:使用
async/await处理耗时操作 - 类型安全:使用 TypeScript 确保类型安全
- 文档完善:提供清晰的 API 文档和使用示例
- 测试覆盖:编写单元测试和集成测试
插件发布
bash# 发布到 crates.io cd src-tauri/plugins/my-plugin cargo publish # 发布到 npm cd src-tauri/plugins/my-plugin/src-js npm publish
社区插件
Tauri 社区提供了丰富的插件,可以在 awesome-tauri 中找到。