00 / 00
Runtime 与权限
理解 Tauri commands、capabilities、plugin、浏览器 fallback 和系统权限
Tauri 应用由两部分组成:前端 WebView 和 Rust 原生 runtime。前端负责界面,Rust 负责系统能力。两边通过 Tauri command 或 plugin 通信。
为什么要有 runtime adapter
模板把所有 Tauri 相关调用放在:
products/01mvp/apps/desktop/src/runtime这样做有三个好处:
- React 组件不会到处散落
invoke和 plugin import - 浏览器预览能用 fallback 调 UI
- 新增系统能力时有统一的测试和排查入口
当前 runtime adapter
| 文件 | 能力 |
|---|---|
core.ts | 判断是否运行在 Tauri、封装 invoke 和可选 plugin import |
preferences.ts | 读取、保存、重置本地偏好 |
app-info.ts | 读取应用名、版本和 identifier |
opener.ts | 打开外部 URL 或 app data 目录 |
updater.ts | 预留自动更新检查入口 |
浏览器预览没有真实 Tauri runtime。模板会返回 unavailable 状态,或使用 localStorage 保存临时偏好。
Rust commands
Rust command 在:
products/01mvp/apps/desktop/src-tauri/src/lib.rs当前命令包括:
get_desktop_preferences
set_desktop_preferences
reset_desktop_preferences
open_app_data_dir前端通过 invokeTauri() 调用这些命令。新增命令后,要记得加入:
.invoke_handler(tauri::generate_handler![
get_desktop_preferences,
open_app_data_dir,
reset_desktop_preferences,
set_desktop_preferences
])Capabilities
Tauri v2 用 capabilities 控制前端能调用哪些命令和 plugin。配置在:
products/01mvp/apps/desktop/src-tauri/capabilities/default.json当前模板只开放:
{
"permissions": ["core:default", "opener:default", "process:default"]
}新增 plugin 时,只开放产品真正需要的权限。比如你只需要检查更新,就优先使用 updater 的 check 权限,不要直接开放完整安装流程。
官方文档:Tauri permissions
Plugin 怎么加
新增一个 Tauri plugin 通常要改三处:
products/01mvp/apps/desktop/package.json添加 JS plugin。products/01mvp/apps/desktop/src-tauri/Cargo.toml添加 Rust plugin。src-tauri/src/lib.rs注册 plugin,并在 capabilities 里开放权限。
前端使用时,不要在组件里直接 import plugin。先在 src/runtime/<feature>.ts 封装。
系统权限
有些能力不是 Tauri capabilities 能完全决定的。操作系统还会要求用户授权。
| 能力 | 可能涉及的系统权限 |
|---|---|
| 麦克风 | macOS Microphone、Windows privacy setting |
| 截屏 | macOS Screen Recording |
| 全局快捷键或输入监听 | macOS Accessibility / Input Monitoring |
| 自动粘贴或控制其他 App | macOS Automation / Accessibility |
| 读取任意文件 | 文件选择器或文件系统权限 |
模板默认不启用这些能力。具体产品需要时,再按产品场景添加权限说明、检测状态和用户引导。
新增系统能力的推荐流程
- 先写清楚这个能力为什么需要原生 runtime。
- 选择官方 plugin 或成熟 plugin,避免手写平台底层逻辑。
- 在 Rust 侧注册 plugin 或 command。
- 在 capabilities 里只开放必要权限。
- 在
src/runtime封装 adapter,并提供浏览器 fallback。 - 在 UI 里展示可理解的不可用状态。
- 在 Tauri 原生窗口里验收,不只看浏览器预览。
不要把浏览器 smoke 当成 native 验收
浏览器预览能证明布局、普通 React 状态和 HTTP API。它不能证明:
- Tauri command 能调用
- app data 目录能写入
- tray 能出现
- 系统权限能弹窗
- 签名后的 app 能被系统识别
涉及原生能力时,至少跑:
vpr @01mvp/desktop#tauri:dev再跑 Rust 检查:
vpr @01mvp/desktop#tauri:check这篇文档有问题?