Kaynağa Gözat

feat: add `custom html` support

mrxiaozhuox 3 yıl önce
ebeveyn
işleme
e5dfe84eb1
3 değiştirilmiş dosya ile 26 ekleme ve 6 silme
  1. 0 2
      src/assets/index.html
  2. 15 2
      src/builder.rs
  3. 11 2
      src/cli/config/mod.rs

+ 0 - 2
src/assets/index.html

@@ -4,11 +4,9 @@
     <meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
     <meta charset="UTF-8" />
     {style_include}
-    
   </head>
   <body>
     <div id="main"></div>
-    <!-- Note the usage of `type=module` here as this is an ES6 module -->
     <script type="module">
       import init from "./assets/dioxus/{app_name}.js";
       init("./assets/dioxus/{app_name}_bg.wasm");

+ 15 - 2
src/builder.rs

@@ -4,7 +4,8 @@ use crate::{
     DioxusConfig,
 };
 use std::{
-    fs::{copy, create_dir_all, remove_dir_all},
+    fs::{copy, create_dir_all, remove_dir_all, File},
+    io::Read,
     panic,
     path::PathBuf,
     process::Command,
@@ -272,7 +273,19 @@ pub fn build_desktop(config: &CrateConfig, is_serve: bool) -> Result<()> {
 }
 
 pub fn gen_page(config: &DioxusConfig, serve: bool) -> String {
-    let mut html = String::from(include_str!("./assets/index.html"));
+    let crate_root = crate::cargo::crate_root().unwrap();
+    let custom_html_file = crate_root.join("index.html");
+    let mut html = if custom_html_file.is_file() {
+        let mut buf = String::new();
+        let file = File::open(custom_html_file).unwrap();
+        if let Ok(v) = file.read_to_string(&mut buf) {
+            buf
+        } else {
+            String::from(include_str!("./assets/index.html"))
+        }
+    } else {
+        String::from(include_str!("./assets/index.html"));
+    };
 
     let resouces = config.web.resource.clone();
 

+ 11 - 2
src/cli/config/mod.rs

@@ -18,8 +18,10 @@ pub enum Config {
         #[clap(long, default_value = "web")]
         platform: String,
     },
-    /// Format Print Dioxus-Config.
-    FormatPrint {}
+    /// Format print Dioxus config.
+    FormatPrint {},
+    /// Create a custom html file.
+    CustomHtml {}
 }
 
 impl Config {
@@ -48,6 +50,13 @@ impl Config {
             Config::FormatPrint {} => {
                 println!("{:#?}", crate::CrateConfig::new()?.dioxus_config);
             }
+            Config::CustomHtml {} => {
+                let html_path = crate_root.join("index.html");
+                let mut file = File::create(html_path)?;
+                let content = include_str!("../../assets/index.html");
+                file.write_all(content.as_bytes())?;
+                log::info!("🚩 Create custom html file done.");
+            }
         }
         Ok(())
     }