opener查看的开源地址:https://github.com/tauri-apps/plugins-workspace/blob/v2/plugins/opener/package.json
其实我们看一下底层的依赖文件:
在 Rust 项目中,这些依赖项各自有不同的用途。以下是每个依赖项的简要说明:
1. serde
serde = { workspace = true }
- 用途:一个强大的序列化和反序列化框架
- 功能:
- 提供将 Rust 数据结构序列化为多种格式(如 JSON、YAML 等)的能力
- 支持派生宏(
#[derive(Serialize, Deserialize)]
)来自动实现序列化/反序列化逻辑 - 是 Rust 生态中最常用的序列化库
2. serde_json
serde_json = { workspace = true }
- 用途:JSON 格式的支持库
- 功能:
- 专门处理 JSON 数据的序列化和反序列化
- 与
serde
配合使用,提供 JSON 解析和生成功能 - 包含 JSON 值的运行时表示(
serde_json::Value
)
3. tauri
tauri = { workspace = true }
- 用途:构建跨平台桌面应用程序的框架
- 功能:
- 类似 Electron 但更轻量(使用系统 WebView 而不是打包 Chromium)
- 允许用 HTML/CSS/JS 构建界面,用 Rust 实现后端逻辑
- 提供系统 API 访问(文件系统、窗口管理等)
- 支持构建独立应用程序
4. thiserror
thiserror = { workspace = true }
- 用途:简化自定义错误类型的定义
- 功能:
- 通过派生宏自动实现
std::error::Error
trait - 方便地为错误类型添加友好的错误信息
- 特别适合库作者定义自己的错误类型
- 通过派生宏自动实现
5. open
open = { version = "5", features = ["shellexecute-on-windows"] }
- 用途:跨平台打开文件、URL 或程序的工具
- 功能:
- 在用户默认应用中打开文件或 URL
- 特定功能
shellexecute-on-windows
确保在 Windows 上使用ShellExecute
API - 类似在命令行中执行
start
(Windows) 或open
(macOS)
6. glob
glob = { workspace = true }
- 用途:文件路径模式匹配
- 功能:
- 支持 Unix 风格的 glob 模式(如
*.txt
或**/*.rs
) - 用于查找匹配特定模式的文件路径
- 常用于构建工具或需要文件系统遍历的场景
- 支持 Unix 风格的 glob 模式(如
总结
这些依赖项组合在一起,表明这个项目可能是一个:
- 使用 Tauri 构建的桌面应用程序
- 需要处理 JSON 配置或数据(serde + serde_json)
- 有自定义错误处理需求(thiserror)
- 需要打开外部文件/URL(open)
- 需要文件系统操作和模式匹配(glob)
workspace = true
表示这些依赖项的版本由工作区根目录的 Cargo.toml
统一管理,而不是在每个包的 Cargo.toml
中单独指定版本。
这里主要用到的就是open这个依赖,用于打开文件或url地址的,然后在底层封装了一个tauri::command,然后通过注入js来实现调用这个函数,中间加了权限校验等功能:
权限校验:
注入的js实现api调用: