#worker #kv #cloudflare-workers #http #cloudflare #static-file

bin+lib kv-assets

从Workers KV存储中提供静态资源

3个版本

0.2.3 2021年2月16日
0.2.2 2021年1月23日
0.2.1 2021年1月18日

#725HTTP服务器


2 个crates中使用(通过 wasm-service

MIT/Apache

31KB
536

kv-assets & kv-sync

将静态资源存储在Workers KV中,为Rust-WASM Worker HTTP服务器

命令行程序 kv-sync 是一个构建工具,它会在本地文件夹和Workers KV之间同步文件,并生成一个小的清单文件,该文件与worker wasm一起发布。

此crate最初是为了支持 StaticFileHandlerwasm-service 开发的,以添加对基于Rust Worker的http服务器的静态文件支持。

尽管 wrangler 对配置为Workers "Site"的项目执行类似类型的同步(并且我们在实现中确实重用了大量的 wrangler 代码),但还有一些差异

  • 此工具与Rust项目兼容

  • 生成的清单被序列化为本地文件,并使用例如 include_bytes!("../data/assets.bin") 这样的方式编译到wasm包中作为静态字节数组。

  • 而wrangler站点清单只包含KV键路径,这个清单包含额外的元数据,如最后修改时间(来自文件系统),可用于处理HTTP头 "If-Modified-Since",这样worker可以决定是否返回304-Not-Modified,而不需要访问KV。

安装

要安装kv-sync,请运行 cargo install kv-assets,程序 kv-sync 将被添加到 .cargo/bin

如果您想在项目中包含kv-assets库,请向Cargo.toml添加一行

`kv-assets = "0.2"`

kv-sync 操作

kv-sync 执行以下操作

  • 生成指定目录下所有文件的 AssetIndex,默认为 ./public,跳过以 "." 开头的文件或在 .gitignore 或 .ignore 中提到的文件(.gitignore 和 .ignore 的搜索路径包括资产文件夹及其父文件夹)。AssetIndex 是一个 HashMap<String,AssetMetadata>,其中键是从顶级资产文件夹的相对路径。使用 bincodeAssetIndex 序列化到一个本地文件中。

  • 将新文件和更新文件上传到 KV 存储,使用包含文件校验和的 KV 键作为唯一版本标识。

  • 如果您运行 kv-sync --prune,它将通过删除不再引用的旧版本文件来修剪 KV 存储。但是,在代码(带有更新后的 assets.bin)连续发布之前不要使用此标志,否则您会收到文件未找到错误。

kv-sync 添加到开发工作流程

在首次发布工作器之前至少运行一次 kv-sync。这将上传文件并生成清单。

只有在资产有变化(public 文件夹中的任何内容发生变化)时才需要再次运行 kv-sync。如果该文件夹中的某个文件发生变化,请运行以下命令

kv-sync
wrangler publish
# if wrangler publish succeeded without errors, then also run
kv-sync --prune

第一次 kv-sync 重新生成清单并上传已修改的文件;wrangler publish 使用更新后的清单发布代码。如果发布成功,可以安全地运行修剪步骤以删除 KV 存储中的旧资产。

依赖项

~4–24MB
~408K SLoC