Browse Source

feat: commit code

mrxiaozhuox 3 years ago
parent
commit
bb69a04045
6 changed files with 54 additions and 37 deletions
  1. 2 2
      Dioxus.toml
  2. 47 27
      src/cli/build/mod.rs
  3. 0 1
      src/cli/cfg.rs
  4. 1 2
      src/cli/clean/mod.rs
  5. 1 2
      src/cli/serve/mod.rs
  6. 3 3
      src/config.rs

+ 2 - 2
Dioxus.toml

@@ -7,11 +7,11 @@ name = "dioxus-cli"
 # desktop, web, mobile, ssr
 platforms = ["web"]
 
-[web.app]
-
 # Web `build` & `serve` dist path
 out_dir = "dist"
 
+[web.app]
+
 # resource (static) file folder
 public_dir = "public"
 

+ 47 - 27
src/cli/build/mod.rs

@@ -1,4 +1,9 @@
-use std::{io::Write, path::PathBuf, process::Command, fs::copy};
+use std::{
+    fs::{copy, create_dir_all},
+    io::Write,
+    path::PathBuf,
+    process::Command,
+};
 
 use crate::{cfg::ConfigOptsBuild, gen_page};
 use std::fs::remove_dir_all;
@@ -25,7 +30,7 @@ impl Build {
 
         if self.build.platform.is_some() {
             if self.build.platform.unwrap().to_uppercase() == "DESKTOP" {
-                log::info!("🚅 Running build command...");
+                log::info!("🚅 Running build [Desktop] command...");
 
                 let mut cmd = Command::new("cargo");
                 cmd.current_dir(&crate_config.crate_dir)
@@ -47,36 +52,52 @@ impl Build {
 
                 if output.status.success() {
                     if crate_config.out_dir.is_dir() {
-
                         remove_dir_all(&crate_config.out_dir)?;
+                    }
+
+                    let release_type = match crate_config.release {
+                        true => "release",
+                        false => "debug",
+                    };
 
-                        let release_type = match crate_config.release {
-                            true => "release",
-                            false => "debug",
-                        };
-                    
-                        let mut res_path = match &crate_config.executable {
-                            crate::ExecutableType::Binary(name)
-                            | crate::ExecutableType::Lib(name) => crate_config
+                    let file_name: String;
+                    let mut res_path = match &crate_config.executable {
+                        crate::ExecutableType::Binary(name) | crate::ExecutableType::Lib(name) => {
+                            file_name = name.clone();
+                            crate_config
                                 .target_dir
                                 .join(format!("{}", release_type))
-                                .join(format!("{}", name)),
-
-                            crate::ExecutableType::Example(name) => crate_config
+                                .join(format!("{}", name))
+                        }
+                        crate::ExecutableType::Example(name) => {
+                            file_name = name.clone();
+                            crate_config
                                 .target_dir
-                                .join(format!("{}/examples", release_type))
-                                .join(format!("{}", name)),
-                        };
-
-                        let target_file;
-                        if cfg!(windows) {
-                            res_path.set_extension("exe");
-                            target_file = format!("{}.exe", &crate_config.dioxus_config.application.name);
-                        } else {
-                            target_file = crate_config.dioxus_config.application.name.clone();
+                                .join(format!("{}", release_type))
+                                .join("examples")
+                                .join(format!("{}", name))
                         }
-                        copy(res_path, &crate_config.out_dir.join(target_file))?;
+                    };
+
+                    let target_file;
+                    if cfg!(windows) {
+                        res_path.set_extension("exe");
+                        target_file = format!("{}.exe", &file_name);
+                    } else {
+                        target_file = file_name.clone();
                     }
+                    create_dir_all(&crate_config.out_dir)?;
+                    copy(res_path, &crate_config.out_dir.join(target_file))?;
+
+                    log::info!(
+                        "🏛 Build completed: [:{}]",
+                        &crate_config
+                            .dioxus_config
+                            .application
+                            .out_dir
+                            .unwrap_or(PathBuf::from("dist"))
+                            .display()
+                    );
                 }
 
                 return Ok(());
@@ -93,8 +114,7 @@ impl Build {
                 .join(
                     crate_config
                         .dioxus_config
-                        .web
-                        .app
+                        .application
                         .out_dir
                         .clone()
                         .unwrap_or(PathBuf::from("dist")),

+ 0 - 1
src/cli/cfg.rs

@@ -2,7 +2,6 @@ use std::path::PathBuf;
 use structopt::StructOpt;
 
 use serde::Deserialize;
-use std::collections::HashMap;
 
 /// Config options for the build system.
 #[derive(Clone, Debug, Default, Deserialize, StructOpt)]

+ 1 - 2
src/cli/clean/mod.rs

@@ -28,8 +28,7 @@ impl Clean {
 
         let out_dir = crate_config
             .dioxus_config
-            .web
-            .app
+            .application
             .out_dir
             .unwrap_or(PathBuf::from("dist"));
         if crate_config.crate_dir.join(&out_dir).is_dir() {

+ 1 - 2
src/cli/serve/mod.rs

@@ -41,8 +41,7 @@ impl Serve {
                 .join(
                     crate_config
                         .dioxus_config
-                        .web
-                        .app
+                        .application
                         .out_dir
                         .clone()
                         .unwrap_or(PathBuf::from("dist")),

+ 3 - 3
src/config.rs

@@ -39,11 +39,11 @@ impl Default for DioxusConfig {
             application: ApplicationConfig {
                 name: "dioxus".into(),
                 platforms: vec![String::from("web")],
+                out_dir: Some(PathBuf::from("dist")),
             },
             web: WebConfig {
                 app: WebAppConfing {
                     title: Some("dioxus | ⛺".into()),
-                    out_dir: Some(PathBuf::from("dist")),
                     public_dir: Some(PathBuf::from("public")),
                 },
                 watcher: WebWatcherConfing {
@@ -67,6 +67,7 @@ impl Default for DioxusConfig {
 pub struct ApplicationConfig {
     pub name: String,
     pub platforms: Vec<String>,
+    pub out_dir: Option<PathBuf>,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -79,7 +80,6 @@ pub struct WebConfig {
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct WebAppConfing {
     pub title: Option<String>,
-    pub out_dir: Option<PathBuf>,
     pub public_dir: Option<PathBuf>,
 }
 
@@ -130,7 +130,7 @@ impl CrateConfig {
         let workspace_dir = crate::cargo::workspace_root()?;
         let target_dir = workspace_dir.join("target");
 
-        let out_dir = match dioxus_config.web.app.out_dir {
+        let out_dir = match dioxus_config.application.out_dir {
             Some(ref v) => crate_dir.join(v),
             None => crate_dir.join("dist"),
         };