You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tauri V2中如何在获取app实例前获取资源路径?

在Tauri V2中提前获取资源路径的解决方案

你不需要提前获取AppHandle,Tauri的Context对象(通过tauri::generate_context!()生成)本身就具备路径解析能力,可以直接用它来获取资源目录路径,具体实现步骤如下:

  1. 提前生成Context实例,用它解析资源路径
  2. 加载数据库迁移文件
  3. 初始化tauri::Builder时,在run方法中传入提前生成的Context

修改后的完整代码如下:

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    // 提前生成context,用于解析资源路径
    let context = tauri::generate_context!();
    
    // 通过context获取资源路径
    let resource_path = context.path().resolve("migration", tauri::path::BaseDirectory::Resource)
         .expect("Failed to resolve resource path");

    let migrations = load_migrations(resource_path);

    tauri::Builder::default()
        .setup(|app| {
            #[cfg(debug_assertions)]
            {
                let window = app.get_webview_window("main").unwrap();
                window.open_devtools();
            }
            Ok(())
        })
        .plugin(tauri_plugin_fs::init())
        .plugin(tauri_plugin_dialog::init())
        .plugin(tauri_plugin_clipboard_manager::init())
        .plugin(
            tauri_plugin_sql::Builder::default()
                .add_migrations("sqlite:test.db", migrations)
                .build(),
        )
        .plugin(tauri_plugin_opener::init())
        .invoke_handler(tauri::generate_handler![create_pdf])
        // 传入提前生成的context,而不是再次调用generate_context!()
        .run(context)
        .expect("error while running tauri application");
}

关键点说明

  • tauri::generate_context!()会读取你的tauri.conf.json配置生成上下文,包含应用的路径信息、窗口配置等核心数据
  • 确保你的tauri.conf.json中正确配置了资源目录,比如将migration文件夹添加到tauri > bundle > resources数组中,这样打包时才会将迁移文件包含进去:
    {
      "tauri": {
        "bundle": {
          "resources": ["migration/**/*"]
        }
      }
    }
    

内容的提问来源于stack exchange,提问作者Ben Quan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:49:53