diff --git a/cli/args/flags.rs b/cli/args/flags.rs index 418edcf34b62a8..eaff68765d1361 100644 --- a/cli/args/flags.rs +++ b/cli/args/flags.rs @@ -343,6 +343,7 @@ pub struct ServeFlags { pub port: u16, pub host: String, pub worker_count: Option, + pub open_site: bool, } impl ServeFlags { @@ -354,6 +355,7 @@ impl ServeFlags { port, host: host.to_owned(), worker_count: None, + open_site: false, } } } @@ -3037,7 +3039,7 @@ Start a server defined in server.ts, watching for changes and running on port 50 .long("host") .help("The TCP address to serve on, defaulting to 0.0.0.0 (all interfaces)") .value_parser(serve_host_validator), - ) + ).arg(Arg::new("open_site").long("open").help("Open the browser on the address that the server is running on.").action(ArgAction::SetTrue)) .arg( parallel_arg("multiple server workers") ) @@ -5238,6 +5240,7 @@ fn serve_parse( let host = matches .remove_one::("host") .unwrap_or_else(|| "0.0.0.0".to_owned()); + let open_site = matches.remove_one::("open_site").unwrap_or(false); let worker_count = parallel_arg_parse(matches).map(|v| v.get()); @@ -5284,6 +5287,7 @@ fn serve_parse( port, host, worker_count, + open_site, }); Ok(()) diff --git a/cli/tools/serve.rs b/cli/tools/serve.rs index d7989140aeb20f..e96fb8f3fcb501 100644 --- a/cli/tools/serve.rs +++ b/cli/tools/serve.rs @@ -44,10 +44,25 @@ pub async fn serve( maybe_npm_install(&factory).await?; let worker_factory = factory.create_cli_main_worker_factory().await?; + + if serve_flags.open_site { + let host: String; + if serve_flags.host == "0.0.0.0" || serve_flags.host == "127.0.0.1" { + host = "http://127.0.0.1".to_string(); + } else if serve_flags.host == "localhost" { + host = "http://localhost".to_string(); + } else { + host = format!("https://{}", serve_flags.host); + } + let port = serve_flags.port; + let _ = open::that_detached(format!("{host}:{port}")); + } + let hmr = serve_flags .watch .map(|watch_flags| watch_flags.hmr) .unwrap_or(false); + do_serve( worker_factory, main_module.clone(),