11个版本
使用旧的 Rust 2015
0.3.4 | 2021年1月18日 |
---|---|
0.3.3 | 2018年11月22日 |
0.2.0 | 2018年11月16日 |
0.1.4 | 2018年11月16日 |
#2385 in 网页编程
每月32次下载
9KB
107 行
Webpacker-rs
Webpacker-rs 是一个 Rust 包装库,用于在 Rust 网页框架的部署和资产管理中使用 WebpackerCli/Webpacker/Webpack。
用法
将以下内容添加到您的 Cargo.toml 文件中
[dependencies]
webpacker = "~0.3"
[build-dependencies]
webpacker = "~0.3"
在您能够构建之前,您需要使用以下命令初始化 webpacker 环境
gem install webpacker_cli
webpacker-cli init
现在您的构建脚本将能够编译。在您的构建脚本中,您可以进行以下操作
use webpacker;
fn main() {
// Validating dependencies…
assert!(webpacker::valid_project_dir());
// Compiling assets…
let _ = webpacker::compile();
}
然后在您的应用程序在网页启动期间,您可以使用以下命令生成文件清单的哈希值
use webpacker;
// Returns `Manifest` object which is an
// immutable Hashmap
webpacker::manifest()
您可以在您的路由表中使用 Manifest
对象。
Gotham
在 Gotham 中,您可以使用以下方式将清单用于路由器
pub fn router() -> Router {
build_simple_router(|route| {
for (key, value) in webpacker::manifest(None).unwrap() {
route
.get(&format!("public/{}", key))
.to_file(format!("public{}", value));
}
})
}
在您的每个网页中,您可以将资产链接到您的网页,就像它们位于 public/
文件夹中一样。这将把正常的文件名如 application.js
映射到其哈希版本 /packs/application-285f2db5acb1800187f0.js
。 我不确定路由器这样做是否能让缓存失效工作如预期。
推荐的做法是将映射的文件名直接写入生成的网页HTML源。如果您使用 tera,则可以这样做
pub static ASSET_DIRECTORY: &'static str = "public";
lazy_static! {
pub static ref MANIFEST: Manifest = webpacker::manifest(None).unwrap();
}
mod assets {
use super::{ASSET_DIRECTORY, MANIFEST};
use webpacker::asset_path::AssetPath;
use std::ops::Deref;
pub fn source(key: &str) -> String {
AssetPath::new(ASSET_DIRECTORY, key, MANIFEST.deref()).into()
}
}
pub fn index_page(state: State) -> (State, (mime::Mime, String)) {
let mut context = Context::new();
context.insert("application_source", &assets::source("application.js"));
let rendered = TERA.render("landing_page/index.html.tera", &context).unwrap();
(state, (mime::TEXT_HTML, rendered))
}
<script src="{{ application_source }}"></script>
使用这种方式,您应该使用类似以下方式将文件夹 /public/*
路由
pub fn router() -> Router {
build_simple_router(|route| {
route.get("public/*").to_dir(
FileOptions::new("public")
.with_cache_control("no-cache")
.with_gzip(true)
.build(),
);
})
}
FileOptions
这里提供异步文件支持。
贡献
欢迎在 GitHub 上提交错误报告和拉取请求:https://github.com/danielpclark/webpacker-cli
许可证
该软件库以开源形式提供,遵循 GNU Lesser General Public License version 3 的条款。
依赖项
~1MB
~25K SLoC