#resources #cargo #cargo-command #metadata #required #within #help

bin+lib cargo-resources

Cargo Resources 提供一个 cargo 命令行工具和库,帮助在 Cargo Crates 中声明和汇总资源

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 插件

Download history 336/week @ 2024-05-12 478/week @ 2024-05-19 129/week @ 2024-05-26 322/week @ 2024-06-02 68/week @ 2024-06-09 52/week @ 2024-06-16 36/week @ 2024-06-23 106/week @ 2024-06-30 188/week @ 2024-07-07 127/week @ 2024-07-14 120/week @ 2024-07-21 86/week @ 2024-07-28 55/week @ 2024-08-04

388 每月下载量

GPL-3.0-or-later

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。
当资源将复制到资源根之外时终止。

故障排除

  1. 本地工作,但从发布的crate中不工作。

    • 检查资源是否包含在发布的crate中(如果需要,请将其添加到cargo.toml中)。
  2. 返回错误:“无法规范化资源路径:...”。

    • 输出路径中的目录/文件夹不存在。

依赖项

~7–16MB
~286K SLoC