#static #build #pack #compile-time #binaries #binary #assets

打包器

在编译时将静态文件打包到您的二进制文件中

12 个版本

0.5.7 2022 年 1 月 22 日
0.5.5 2022 年 1 月 21 日
0.5.3 2019 年 12 月 5 日
0.5.1 2019 年 11 月 15 日
0.1.0 2019 年 1 月 30 日

#2933Rust 模式


用于 2 crates

MIT 许可证

8KB

打包器

打包器是一个库,使用宏魔法帮助您将静态文件打包到二进制文件中。当您以开发模式构建时,它将像往常一样从您的文件系统中获取,但当您使用 --release 构建,它将把资产打包到您的二进制文件中!

文档

联系方式

作者:Michael Zhang, Nathan Ringo

许可证:MIT


lib.rs:

打包器是一个库,使用宏魔法帮助您将静态文件打包到二进制文件中。以下是实现方法:

步骤 1:包含

在您的 Cargo.toml 中包含该crate

[dependencies]
packer = "0.5"

步骤 2:派生

开始从您的结构体派生 Packer。您需要提供一个 source 属性来指示它应该从中拉取的目录。路径相对于crate根目录。

use packer::Packer;
#[derive(Packer)]
#[packer(source = "tests/basic")]
struct Assets;

步骤 3:使用它!

现在您可以使用 get 函数访问任何文件

use packer::Packer;
let data: Option<&'static [u8]> = Assets::get("kermit.jpg");

您还可以选择列出已存储的所有文件。

use packer::Packer;
let files /*: impl Iterator<Item = &'static str>*/ = Assets::list();
// Result (with no guarantee of order):
// files = ["tests/basic/first/kermit.jpg", "tests/basic/second/ignored.x", "tests/basic/second/LICENSE"]

(有关 Packer 特性的完整方法列表,请参阅文档。)

当您以开发模式构建时,它将像往常一样从您的文件系统中获取,但当您使用 --release 构建,它将把资产打包到您的二进制文件中!

忽略路径

您可以选择使用 ignore 选项忽略某些路径

#[derive(Packer)]
#[packer(source = "tests/basic/second", ignore = "*.x")]
struct Assets;

// using BTreeSet since there's no guarantee of order
assert_eq!(Assets::list().into_iter().collect::<BTreeSet<_>>(),
           vec!["tests/basic/second/LICENSE"].into_iter().collect::<BTreeSet<_>>());

移除前缀

默认情况下,路径将保留前缀。例如,如果您的文件位于相对于项目根目录的 static/index.html,则打包版本中的路径也将是 static/index.html。如果您希望它只是 index.html,请按以下方式配置 prefixed 选项

#[derive(Packer)]
#[packer(source = "tests/basic", prefixed = false)]
struct Assets;

默认情况下,此选项设置为 true。

依赖项

~1.6–9.5MB
~81K SLoC