14 个版本
0.5.14 | 2024 年 4 月 1 日 |
---|---|
0.5.13 | 2024 年 3 月 25 日 |
0.5.12 | 2023 年 9 月 28 日 |
0.5.11 | 2023 年 5 月 23 日 |
0.5.4 | 2022 年 6 月 23 日 |
#125 在 Cargo 插件 中
每月下载量 812
47KB
907 行
cargo vendor
,但带有过滤功能
核心的 cargo vendor
工具非常有用,可以保存所有依赖项。然而,它不提供任何过滤功能;今天 cargo 包含所有平台,但某些项目可能只关心 Linux,例如。
更多信息: https://github.com/rust-lang/cargo/issues/7058
生成带过滤功能的 vendor 目录
以下是一个基本示例,它会过滤掉所有未针对 Linux 定位的 crate;例如,这将删除只针对 Windows 或 MacOS 的 crate,如 winapi-x86_64-pc-windows-gnu
和 core-foundation
。
$ cargo vendor-filterer --platform=x86_64-unknown-linux-gnu
您也可以按层级进行过滤
$ cargo vendor-filterer --tier=2
目前这将删除如 redox_syscall
等crate。
您还可以通过 Cargo 元数据 中的 package.metadata.vendor-filter
键声明性地指定所需的 vendor 配置。在这个例子中,我们只包括第 1 和 2 层的 Linux 平台,并额外删除一些 vendored C 源代码
[package.metadata.vendor-filter]
platforms = ["*-unknown-linux-gnu"]
tier = "2"
all-features = true
exclude-crate-paths = [ { name = "curl-sys", exclude = "curl" },
{ name = "libz-sys", exclude = "src/zlib" },
{ name = "libz-sys", exclude = "src/zlib-ng" },
]
对于工作空间,使用相应的 工作空间元数据 键 workspace.metadata.vendor-filter
。
Cargo.toml 中 package.metadata.vendor-filter
的可用选项
platforms
:rustc 目标三元组的列表;这和例如cargo metadata --filter-platform
所接受的值相同。你可以指定多个值,并且支持*
通配符。例如,*-unknown-linux-gnu
。tier
:这可以是 "1" 或 "2"。它除了可以与platforms
一起指定外,还可以单独指定。all-features
:在vendoring时启用当前crate的所有功能。exclude-crate-paths
:从目标crate中移除文件和目录。此功能的一个关键用例是当只想支持动态链接时,从libz-sys
等crate中移除嵌入的C库的vendored副本。
所有这些选项都有相应的CLI标志;请参阅 cargo vendor-filterer --help
。
生成可重复生成的vendoring tar包
你也可以提供 --format=tar.zstd
来输出通过zstd压缩的可重复的tar存档;默认文件名将是 vendor.tar.zstd
。类似地,还有 --format=tar.gz
用于gzip,以及 --format=tar
用于输出未压缩的tar存档,你可以按你喜欢的方式对其进行压缩。强烈建议使用 --prefix=vendor
,这在使用例如主目录时会有更少令人惊讶的行为。例如,--prefix=vendor --format=tar.zstd
一起使用。
此选项需要在环境中设置 SOURCE_DATE_EPOCH
或外部 git
,并且工作目录必须是git仓库。
使用 --format=tar.zstd
时,目前需要外部 zstd
二进制文件。
此功能使用来自 https://reproducible-builds.org/docs/archives/ 的建议逻辑来输出可重复的存档;换句话说,另一个进程/工具也可以使用与 cargo vendor-filterer
相同的版本来克隆你的项目,并使用相同的 cargo vendor-filterer
版本来重新生成vendoring tar包以进行验证。
依赖关系
~7–18MB
~282K SLoC