乐闻世界logo
搜索文章和话题

Tauri 插件系统如何工作

2月19日 19:16

Tauri 插件系统允许扩展框架功能,创建可复用的模块:

插件架构

Tauri 插件由两部分组成:

  • 前端部分:JavaScript/TypeScript API
  • 后端部分:Rust 扩展

创建插件

1. 初始化插件项目

bash
cargo create-tauri-plugin --name my-plugin

2. Rust 端实现

src-tauri/plugins/my-plugin/src/lib.rs:

rust
use 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. 注册命令

rust
impl<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:

typescript
import { 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

typescript
import { writeText, readText } from 'tauri-plugin-clipboard-api'; await writeText('Hello'); const text = await readText();

tauri-plugin-fs-extra

typescript
import { copyFile, moveFile } from 'tauri-plugin-fs-extra-api'; await copyFile('src.txt', 'dest.txt');

tauri-plugin-store

typescript
import 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

typescript
import Database from 'tauri-plugin-sql-api'; const db = await Database.load('sqlite:test.db'); const result = await db.select('SELECT * FROM users');

插件最佳实践

  1. 错误处理:使用 Result 类型处理错误
  2. 异步操作:使用 async/await 处理耗时操作
  3. 类型安全:使用 TypeScript 确保类型安全
  4. 文档完善:提供清晰的 API 文档和使用示例
  5. 测试覆盖:编写单元测试和集成测试

插件发布

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 中找到。

标签:Tauri