3个版本
0.2.3 | 2021年2月16日 |
---|---|
0.2.2 | 2021年1月23日 |
0.2.1 | 2021年1月18日 |
#725 在 HTTP服务器
在 2 个crates中使用(通过 wasm-service)
31KB
536 行
kv-assets & kv-sync
将静态资源存储在Workers KV中,为Rust-WASM Worker HTTP服务器
命令行程序 kv-sync
是一个构建工具,它会在本地文件夹和Workers KV之间同步文件,并生成一个小的清单文件,该文件与worker wasm一起发布。
此crate最初是为了支持 StaticFileHandler
从 wasm-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>
,其中键是从顶级资产文件夹的相对路径。使用bincode
将AssetIndex
序列化到一个本地文件中。 -
将新文件和更新文件上传到 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