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
每月下载 4,276 次
在 12 个 Crates 中使用(直接使用 11 个)
33KB
586 行代码(不含注释)
tower-livereload
一个基于 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
是从头开始构建的,以提供最高的生态系统兼容性。
提供的中间件使用 http
和 http_body
Crates 作为其 HTTP 抽象。这意味着它与任何也使用这些 Crates 的库或框架兼容,例如 hyper
、axum
、tonic
和 warp
。
启发式方法
为了提供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