7 个稳定版本
1.1.4 | 2024年5月22日 |
---|---|
1.1.3 | 2024年5月21日 |
1.1.0 | 2024年5月17日 |
1.0.1 | 2024年5月15日 |
1.0.0 | 2024年5月12日 |
#177 in Cargo 插件
388 每月下载量
26KB
357 行
cargo-resources
一个用于管理资源的 cargo 可执行包。
TLDR
将文件声明为 Cargo.toml 文件中的资源。
[package.metadata.cargo_resources]
provides = [
{ crate_path = "resources/hello_world.txt", output_path="hello_world.txt" }
]
使用 cargo 命令汇总一个 crate 的依赖项(即引用的 crates)声明的所有资源。
cargoresources
概述
我们所说的资源是什么意思
资源是所有那些非代码文件/工件,它们可以帮助你的软件按预期构建或运行。这些包括
- 静态资源(即在编译时固定)
- 动态资源(即在运行时确定)
通常资源会在程序执行期间使用(可能包括测试、基准测试等),但在构建或部署期间也有有效的用例。
我们为什么不直接使用 Rust/Cargo 呢?
Rust 和 Cargo 并没有提供很多结构化的帮助来处理资源,尤其是动态的情况。
默认情况下,Cargo 将包括任何通过 git 配置的文件在发布的 crate 中,Rust 提供了 include_str! 和 include_bytes! 宏。这些支持简单的静态资源使用,例如测试数据(例如,单元测试数据文件在 crate 内声明)。
对于简单情况,不需要外部工具/crate,并在 'src' 旁边创建一个 'resources' 文件夹,然后通过 include_str!(带有相对路径)使用即可。
对于动态(运行/构建时间)或来自外部 crates 的资源,这个 crate 提供了一种更结构化的方法。
安装
建议使用带有固定依赖项的 cargo install 进行安装
cargo安装 cargo-resources --固定
配置声明的资源
使用 Cargo 元数据声明资源,因为这是一个 cargo resources crate,这些资源在 'section' 中声明
[package.metadata.cargo_resources]
在本“部分”中,每个资源都在提供的“数组”中以键/值表的形式声明。
provides = [
{ crate_path = "resources/hello_world.txt", output_path="hello_world.txt" }
]
每个资源支持的信息如下:
项目 | 必需吗? | 备注 |
---|---|---|
resource_name | 可选 | 唯一的资源名称,如果未设置,则从output_path派生。 |
crate_path | 必需 | 资源文件在源crate中的路径。 |
output_path | 可选 | 输出时使用的相对资源路径,如果未设置,则从crate_path派生。 |
encoding | 可选 | 文件编码(Txt或Bin),默认为文本。注意:主要用于使用crates。 |
因此,正常使用时设置crate_path和output_path,或者当output_path相同时代码仅设置crate_path。
声明资源使用情况
按照惯例,crate不需要指定资源使用情况,并默认将所有资源从依赖项收集到默认资源路径。
当这不是所需的操作时,使用crate在其Cargo.toml中指定其要求。
[package.metadata.cargo_resources]
在本“部分”中可以提供以下信息:
必需资源的列表
这些在'requires'数组中指定
requires = [
{ resource_name="hello_world.txt" }
]
每个资源支持的信息如下:
项目 | 必需吗? | 备注 |
---|---|---|
resource_name | 必需 | 唯一的资源名称(如提供crate中声明或派生)。 |
required_sha | 可选 | 可选的SHA256十六进制值。如果指定,资源sha必须匹配。 |
注意:如果设置了必需的sha,任何上游资源的更改都要求使用crate进行有意更新。
合并选项
合并选项作为“部分”中的键值对提供,例如:
resource_root = "target/resources"
支持的选项包括:
合并选项 | 备注 |
---|---|
resource_root | 用于资源根的目录,相对于crate根。默认为target/resources。 |
功能
本crate声明的功能:尚未有功能!
版本历史
版本 | 备注 |
---|---|
1.0.0 | 初始发布。 |
1.0.1 | 修复在未复制资源时缺失文件夹的错误。 |
1.1.0 | 在资源要求中添加required_sha。 当资源将复制到资源根之外时终止。 |
故障排除
-
本地工作,但从发布的crate中不工作。
- 检查资源是否包含在发布的crate中(如果需要,请将其添加到cargo.toml中)。
-
返回错误:“无法规范化资源路径:...”。
- 输出路径中的目录/文件夹不存在。
依赖项
~7–16MB
~286K SLoC