#web-apps #applications #spa #binary #single #executable #embed

spa-rs

将所有 SPA Web 应用程序文件嵌入并发布为单个二进制可执行文件

4 个版本 (2 个重大变更)

0.7.0 2024年2月6日
0.5.5 2023年3月28日
0.3.1 2022年6月21日
0.3.0 2022年6月16日

HTTP 服务器 中排名第 497

MIT 许可证

67KB
1K SLoC

spa-rs

spa-rs 是一个库,可以将所有 SPA Web 应用程序文件(dist 静态文件)嵌入,并发布为单个二进制可执行文件。

它基于 [axum] 和 [rust_embed]

它重新导出所有 axum 模块以方便使用。

示例

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(())
}

会话

有关详细信息,请参阅 [session] 模块。

开发

在编写 SPA 应用程序时,您可能希望使用 SPA 框架提供的热重载功能。例如 [vite dev] 或 [ng serve].

您可以使用 spa-rs 将所有静态请求反向代理到 SPA 框架。 (需要启用 reverse-proxy 功能)

示例

  let forward_addr = "https://127.0.0.1:1234";
  srv.reverse_proxy(forward_addr.parse()?);

许可证:MIT

依赖项

~16–29MB
~504K SLoC