9 个版本
0.5.0-beta.2 | 2024 年 7 月 6 日 |
---|---|
0.1.6 | 2023 年 11 月 8 日 |
0.1.5 | 2022 年 10 月 12 日 |
0.1.4 | 2021 年 9 月 27 日 |
0.1.0 | 2020 年 7 月 31 日 |
在 Web 编程 中排名第 1467
每月下载量 133
55KB
649 行
web-static-pack-packer
web-static-pack-packer 是 web-static-pack 项目中 "构建器"(第一阶段)的部分。查看项目页面以了解两个部分如何合作。
打包部分的目的是收集您的目录/文件/内存切片,预先计算诸如 ETag
、压缩版本(gzip
、brotli
)等,并将它们存储为单个文件(称为 pack
)。您的目标应用程序将包含(例如,使用 https://docs.rs/include_bytes_aligned/latest/include_bytes_aligned/ )并在运行时使用 web-static-pack(加载器部分)"加载" / "解析" pack
,并通过您选择的 Web 服务器提供。
该 crate 通常用于构建脚本 / CI / build.rs 阶段,而不是您的目标应用程序中。它用于从文件列表(如您的 GUI 应用程序/图像/其他资源)创建 pack
,稍后由您的应用程序加载并由 Web 服务器提供。
此 crate 可以以两种方式使用
- 作为独立应用程序,使用
cargo install
安装,如果您使用构建脚本、CI 流程等,这是首选方式。 - 作为库,导入到您的项目中,如果您想在目标应用程序的 build.rs 中使用它或采用一些非常定制的方案,这是一种方法。
作为独立应用程序使用
安装(或更新到匹配的版本)
- 使用以下命令安装它(或更新到匹配的版本):
$ cargo install web-static-pack-packer
并使用 shell 命令$ web-static-pack-packer [PARAMS]...
- 或者克隆仓库,进入
packer
目录,然后执行以下命令:$ cargo run --release -- [PARAMS]...
。(请注意--
,它标记了 cargo run 的参数结束和应用程序参数的开始)。
在本例中,假设选择了第一个选项,并且有 web-static-pack-packer
命令可用。
创建一个 pack
web-static-pack-packer
提供了最新的文档,使用以下命令:$ web-static-pack-packer --help
。应用程序通过子命令构建,以覆盖基本场景。
directory-single [OPTIONS] <INPUT_DIRECTORY_PATH> <OUTPUT_FILE_PATH>
从单个目录创建一个pack
。这是最常见的情况,例如当你在./gui/build
目录中构建了一个网络应用程序,并且你希望它与应用程序一起提供服务。files-cmd [OPTIONS] <OUTPUT_FILE_PATH> <INPUT_BASE_DIRECTORY_PATH> [INPUT_FILE_PATHS]...
允许你以xargs
风格在命令行中指定所有文件。基本目录路径用作在pack
内部构建相对路径的根。files-stdin [OPTIONS] <INPUT_BASE_DIRECTORY_PATH> <OUTPUT_FILE_PATH>
允许你从标准输入提供文件列表。
示例
假设你有一个包含你的网络项目的 vcard-personal-portfolio
目录(在仓库 tests/data/ 中可用)。目录结构如下:
vcard-personal-portfolio
| index.html
| index.txt
+---assets
| +---css
| | style.css
| +---images
| | <some files>.png
| \---js
| script.js
\---website-demo-image
desktop.png
mobile.png
运行以下命令:
$ web-static-pack-packer \
directory-single \
./vcard-personal-portfolio \
./vcard-personal-portfolio.pack
将创建一个新文件 vcard-personal-portfolio.pack
,其中包含所有文件,以便 GET /index.html
或 GET /assets/css/tyle.css
或 GET /website-demo-image/mobile.png
可以正确解析。
在下一步中,应使用 web-static-pack(加载器部分)使用 vcard-personal-portfolio.pack
。
作为库使用
当作为库使用时,你很可能会使用 pack::Builder 创建一个可加载(由加载器加载)的 pack
。
您需要将 file_pack_path::FilePackPath(文件 + 路径)对象添加到构建器中,您可以通过以下方式获取它:
- 手动从 common::pack_path::PackPath 和 common::file::File(从 fs file::build_from_path 或内存切片 file::build_from_content 获取)构建对象。
- 使用 file_pack_path::FilePackPath::build_from_path 读取单个文件。
- 使用 directory::search 在 fs 中自动搜索。
当所有文件都添加到构建器后,您需要将其最终化,并使用 pack::store_file 写入 fs(以将其包含在您的目标应用程序中)或(主要为了测试目的)使用 pack::store_memory 序列化到内存中。
示例
此示例将与应用场景中的示例完全相同
// start with empty pack builder
let mut pack = Builder::new();
// add files with directory search and default options
pack.file_pack_paths_add(search(
&PathBuf::from("vcard-personal-portfolio"),
&SearchOptions::default(),
&BuildFromPathOptions::default(),
)?)?;
// finalize the builder, obtain pack
let pack = pack.finalize();
// store (serialize `pack` to the fs) to be included in the target app
store_file(&pack, &PathBuf::from("vcard-personal-portfolio.pack"))?;
有关更多示例,请浏览此crate的模块。
许可证:MIT
依赖关系
~11–19MB
~388K SLoC