feat: dev server improvements - recursive watching, auto-open browser
- Recursive file watching: catches imported file changes from registry/ - Auto-detect project root: walks up to find registry/ or examples/ dir - Auto-open browser on startup (xdg-open/open/cmd) - Verified HMR live reload: 0ms recompile on file save
This commit is contained in:
parent
76bb1bb3a2
commit
5425d7768c
1 changed files with 29 additions and 2 deletions
|
|
@ -347,10 +347,28 @@ h2 {{ color: #f87171; margin-bottom: 16px; }}
|
||||||
}
|
}
|
||||||
}).expect("Failed to create file watcher");
|
}).expect("Failed to create file watcher");
|
||||||
|
|
||||||
watcher.watch(&watch_dir, RecursiveMode::NonRecursive)
|
watcher.watch(&watch_dir, RecursiveMode::Recursive)
|
||||||
.expect("Failed to watch directory");
|
.expect("Failed to watch directory");
|
||||||
|
|
||||||
println!("👁 Watching {} for changes", watch_dir.display());
|
// Also watch project root (for registry/components etc.)
|
||||||
|
// Walk up from watch_dir to find a directory containing examples/ or registry/
|
||||||
|
let mut project_root = watch_dir.clone();
|
||||||
|
for _ in 0..5 {
|
||||||
|
if project_root.join("registry").is_dir() || project_root.join("examples").is_dir() {
|
||||||
|
if project_root != watch_dir {
|
||||||
|
let _ = watcher.watch(&project_root, RecursiveMode::Recursive);
|
||||||
|
println!("👁 Also watching {} (project root)", project_root.display());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if let Some(parent) = project_root.parent() {
|
||||||
|
project_root = parent.to_path_buf();
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("👁 Watching {} for changes (recursive)", watch_dir.display());
|
||||||
println!();
|
println!();
|
||||||
|
|
||||||
// Debounce: coalesce rapid events
|
// Debounce: coalesce rapid events
|
||||||
|
|
@ -418,6 +436,15 @@ h2 {{ color: #f87171; margin-bottom: 16px; }}
|
||||||
println!(" Press Ctrl+C to stop");
|
println!(" Press Ctrl+C to stop");
|
||||||
println!();
|
println!();
|
||||||
|
|
||||||
|
// Auto-open browser
|
||||||
|
let url = format!("http://localhost:{port}");
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
{ let _ = std::process::Command::new("xdg-open").arg(&url).spawn(); }
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
{ let _ = std::process::Command::new("open").arg(&url).spawn(); }
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
{ let _ = std::process::Command::new("cmd").args(["/C", "start", &url]).spawn(); }
|
||||||
|
|
||||||
for request in server.incoming_requests() {
|
for request in server.incoming_requests() {
|
||||||
let url = request.url().to_string();
|
let url = request.url().to_string();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue