18 个版本

0.9.3 2024 年 6 月 14 日
0.9.2 2024 年 2 月 5 日
0.9.1 2023 年 11 月 27 日
0.8.0 2023 年 6 月 7 日
0.7.0 2022 年 11 月 17 日

网页编程 中排名 245

Download history 1193/week @ 2024-05-04 1183/week @ 2024-05-11 1059/week @ 2024-05-18 1097/week @ 2024-05-25 1298/week @ 2024-06-01 1198/week @ 2024-06-08 837/week @ 2024-06-15 1167/week @ 2024-06-22 874/week @ 2024-06-29 1113/week @ 2024-07-06 1030/week @ 2024-07-13 1305/week @ 2024-07-20 907/week @ 2024-07-27 1464/week @ 2024-08-03 1076/week @ 2024-08-10 553/week @ 2024-08-17

每月下载 4,276
12 Crates 中使用(直接使用 11 个)

MIT/Apache 协议

33KB
586 行代码(不含注释)

tower-livereload

Build Status Crates.io Lib.rs Documentation

一个基于 tower 的浏览器刷新中间件。

示例

注意,这里仅使用 axum 作为示例,几乎任何 Rust HTTP 库或框架都将是兼容的!

use axum::{response::Html, routing::get, Router};
use tower_livereload::LiveReloadLayer;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let app = Router::new()
        .route("/", get(|| async { Html("<h1>Wow, such webdev</h1>") }))
        .layer(LiveReloadLayer::new());

    let listener = tokio::net::TcpListener::bind("0.0.0.0:3030").await?;
    axum::serve(listener, app).await?;

    Ok(())
}

如果你使用 watchexec 等工具持续重新构建和运行此示例,你应该会在代码更改时看到浏览器刷新。

更多示例可以在 GitHub 上的 examples 目录中找到。

手动刷新

使用 Reloader 工具,可以通过 Rust 代码中的钩子完全刷新您的网页浏览器。请参考 GitHub 上的这个 示例 了解如何实现一个自包含的实时刷新静态服务器。

生态系统兼容性

tower-livereload 是从头开始构建的,以提供最高的生态系统兼容性。

提供的中间件使用 httphttp_body Crates 作为其 HTTP 抽象。这意味着它与任何也使用这些 Crates 的库或框架兼容,例如 hyperaxumtonicwarp

启发式方法

为了提供LiveReload功能,我们需要将代码注入HTML网页中。为了确定页面是否可注入,我们使用了一些基于头部的启发式方法。特别是,Content-Type必须以text/html开头,Content-Length必须设置,且Content-Encoding不得设置。

如果你的某些页面LiveReload不起作用,请确保这些启发式方法适用于你的响应。特别是,如果你使用中间件压缩HTML,请确保在压缩中间件之前应用LiveReload中间件。

许可证

tower-livereload是免费且开源的软件,根据MIT或Apache 2.0许可证的条款分发,任选其一。

除非你明确表示,否则根据Apache-2.0许可证定义的,你有意提交以包含在工作中的任何贡献,都将如上双许可,不附加任何额外条款或条件。

依赖关系

~3–4MB
~63K SLoC