Crates.io | spa-rs |
lib.rs | spa-rs |
version | 0.7.0 |
source | src |
created_at | 2022-06-16 14:54:36.042503 |
updated_at | 2024-02-06 13:36:15.916634 |
description | Embed all SPA web application files and release as a single binary executable. |
homepage | https://github.com/avalon1610/spa-rs |
repository | https://github.com/avalon1610/spa-rs |
max_upload_size | |
id | 607504 |
size | 108,943 |
spa-rs is a library who can embed all SPA web application files (dist static file), and release as a single binary executable.
It based-on [axum] and [rust_embed]
It reexported all axum module for convenient use.
use spa_rs::spa_server_root;
use spa_rs::SpaServer;
use spa_rs::routing::{get, Router};
use anyhow::Result;
spa_server_root!("web/dist"); // specific your SPA dist file location
#[tokio::main]
async fn main() -> Result<()> {
let data = String::new(); // server context can be acccess by [axum::Extension]
let mut srv = SpaServer::new()?
.port(3000)
.data(data)
.static_path("/png", "web") // static file generated in runtime
.route("/api", Router::new()
.route("/get", get(|| async { "get works" })
)
);
srv.run(spa_server_root!()).await?;
Ok(())
}
See [session] module for more detail.
When writing SPA application, you may want use hot-reload functionallity provided
by SPA framework. such as [vite dev
] or [ng serve
].
You can use spa-rs to reverse proxy all static requests to SPA framework. (need enable reverse-proxy
feature)
let forward_addr = "http://localhost:1234";
srv.reverse_proxy(forward_addr.parse()?);
License: MIT