Cargo 主目录
“Cargo 主目录”的功能是下载和缓存源代码。在构建crate时,Cargo 会将下载的构建依赖项存储在 Cargo 主目录中。您可以通过设置 CARGO_HOME
环境变量来更改 Cargo 主目录的位置。如果您需要在 Rust crate 中获取此信息,home crate 提供了一个 API 来获取此位置。默认情况下,Cargo 主目录位于 $HOME/.cargo/
。
请注意,Cargo 主目录的内部结构不稳定,随时可能更改。
Cargo 主目录包含以下组件
文件
-
config.toml
Cargo 的全局配置文件,请参阅参考文档中的config 条目。 -
credentials.toml
来自cargo login
的私有登录凭据,用于登录注册表。 -
.crates.toml
、.crates2.json
这些隐藏文件包含通过cargo install
安装的 crate 的包信息。请勿手动编辑!
目录
-
bin
bin 目录包含通过cargo install
或rustup
安装的 crate 的可执行文件。为了能够访问这些二进制文件,请将该目录的路径添加到您的$PATH
环境变量中。 -
git
Git 源存储在此处-
git/db
当 crate 依赖于 git 存储库时,Cargo 会将该存储库克隆为裸存储库到此目录中,并在必要时更新它。 -
git/checkouts
如果使用了 git 源,则会将存储库中所需的提交从git/db
内的裸存储库检出到此目录中。这为编译器提供了该依赖项指定提交的存储库中包含的实际文件。可以对同一个存储库的不同提交进行多次检出。
-
-
registry
包和 crate 注册表(例如crates.io)的元数据位于此处。-
registry/index
索引是一个裸 git 存储库,其中包含注册表中所有可用 crate 的元数据(版本、依赖项等)。 -
registry/cache
下载的依赖项存储在缓存中。crate 是使用.crate
扩展名命名的压缩 gzip 存档。 -
registry/src
如果包需要下载的.crate
存档,则将其解压缩到registry/src
文件夹中,rustc 将在其中找到.rs
文件。
-
在 CI 中缓存 Cargo 主目录
为了避免在持续集成期间重新下载所有 crate 依赖项,您可以缓存 $CARGO_HOME
目录。但是,缓存整个目录通常效率低下,因为它会包含两次下载的源代码。如果我们依赖于 serde 1.0.92
之类的 crate 并缓存整个 $CARGO_HOME
,我们实际上会缓存两次源代码,即 registry/cache
中的 serde-1.0.92.crate
和 registry/src
中提取的 serde 的 .rs
文件。这可能会不必要地减慢构建速度,因为下载、解压缩、重新压缩和将缓存重新上传到 CI 服务器可能需要一些时间。
如果要缓存使用cargo install
安装的二进制文件,则需要缓存 bin/
文件夹以及 .crates.toml
和 .crates2.json
文件。
在构建之间缓存以下文件和目录应该足够了
.crates.toml
.crates2.json
bin/
registry/index/
registry/cache/
git/db/
供应商化项目的所有依赖项
请参阅cargo vendor
子命令。
清除缓存
理论上,您始终可以删除缓存的任何部分,如果 crate 需要它们,Cargo 会尽力恢复源代码,方法是重新提取存档、检出裸存储库或直接从网络重新下载源代码。
或者,cargo-cache crate 提供了一个简单的 CLI 工具,用于仅清除缓存的选定部分或在命令行中显示其组件的大小。