#static #hyper #resources #http #web #etag

bin+lib web-static-pack-packer

适用于 web-static-pack crate 的可安装 web-static-pack-packer 工具

9 个版本

0.5.0-beta.22024 年 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

Download history 87/week @ 2024-04-21 22/week @ 2024-04-28 13/week @ 2024-05-05 57/week @ 2024-05-12 18/week @ 2024-05-19 19/week @ 2024-05-26 27/week @ 2024-06-02 8/week @ 2024-06-09 42/week @ 2024-06-16 22/week @ 2024-06-23 217/week @ 2024-06-30 61/week @ 2024-07-07 18/week @ 2024-07-14 15/week @ 2024-07-21 85/week @ 2024-07-28 11/week @ 2024-08-04

每月下载量 133

MIT 许可协议

55KB
649

web-static-pack-packer

web-static-pack-packer 是 web-static-pack 项目中 "构建器"(第一阶段)的部分。查看项目页面以了解两个部分如何合作。

打包部分的目的是收集您的目录/文件/内存切片,预先计算诸如 ETag、压缩版本(gzipbrotli)等,并将它们存储为单个文件(称为 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.htmlGET /assets/css/tyle.cssGET /website-demo-image/mobile.png 可以正确解析。

在下一步中,应使用 web-static-pack(加载器部分)使用 vcard-personal-portfolio.pack

作为库使用

当作为库使用时,你很可能会使用 pack::Builder 创建一个可加载(由加载器加载)的 pack

您需要将 file_pack_path::FilePackPath(文件 + 路径)对象添加到构建器中,您可以通过以下方式获取它:

当所有文件都添加到构建器后,您需要将其最终化,并使用 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