use std::process::{Command, Stdio};
use tracing::{info, warn};
pub fn check() -> Result<bool, Box<dyn std::error::Error>> {
if !Command::new("wasm-pack").output().is_ok() {
warn!("未安装wasm-pack,将为您自动安装");
let child = Command::new("cargo")
.arg("install")
.arg("wasm-pack")
.stdin(Stdio::null())
.stdout(Stdio::inherit())
.spawn()?
.wait()?;
println!("\n");
if child.success() {
info!("wasm-pack安装成功");
} else {
return Err("wasm-pack安装失败".into());
}
}
let output = Command::new("rustup")
.arg("target")
.arg("list")
.output()
.expect("rustup failed");
let out_str = String::from_utf8(output.stdout)?;
if !out_str.contains("wasm32-unknown-unknown (installed)") {
warn!("未安装wasm target,将为您自动安装");
let child = Command::new("rustup")
.arg("target")
.arg("add")
.arg("wasm32-unknown-unknown")
.stdin(Stdio::null())
.stdout(Stdio::inherit())
.spawn()?
.wait()?;
println!("\n");
if child.success() {
info!("wasm target安装成功");
} else {
return Err("wasm target安装失败".into());
}
}
Ok(true)
}