1. vite配置.env
VITE_TEST_URL_DEMO = 'http://localhost:8888'
2. tauri 启动参数
"tauri:dev:mac": "tauri dev --config src-tauri/tauri.apple.conf.json -- -- test_url_demo=http://localhost:8888",
"tauri:dev:mac:v2": "tauri dev --config src-tauri/tauri.apple.conf.json -- -- --test_url_demo http://localhost:8888",
- main.rs 利用 Tauri 的 State 管理器,创建一个共享的全局变量
// State 管理器
pub struct AppState {
test_url_demo: Mutex<String>,
}
...
// 设置默认值
tauri::Builder::default()
.manage(AppState {
test_url_demo: Mutex::new("https://localhost:8080".to_string()),
})
...
builder.setup(|app| {
let args: Vec<String> = std::env::args().collect();
// ["target/debug/desktop-demo", "--test_url_demo", "http://localhost:8888"]
// ["target/debug/desktop-demo", "test_url_demo=http://localhost:8888"]
println!("----> args: {:?}", args);
let mut arg_test_url_demo = None;
for i in 0..args.len() {
let arg = &args[i];
if arg.starts_with("test_url_demo=") {
arg_test_url_demo = Some(arg.trim_start_matches("test_url_demo=").to_string());
break;
} else if arg == "--test_url_demo" && i + 1 < args.len() {
arg_test_url_demo = Some(args[i + 1].clone());
break;
}
}
println!("----> arg_test_url_demo: {:?}", arg_test_url_demo);
if let Some(value) = arg_test_url_demo {
let app_state = app.state::<AppState>();
let mut test_url_demo = app_state.test_url_demo.lock().unwrap();
println!("----> test_url_demo before: {:?}", test_url_demo);
*test_url_demo = value.clone();
println!("----> test_url_demo after: {:?}", test_url_demo);
} else {
println!("----> test_url_demo parameter not found");
}
})
use crate::AppState;
pub async fn check(
app_handle: AppHandle
) ->Result<String, String> {
let app_state = app_handle.state::<AppState>();
let test_url_demo = app_state.test_url_demo.lock().unwrap().clone();
println!("----> test_url_demo in other file: {}", test_url_demo);
...
}