Cargo 主目录
“Cargo 主目录”用作下载和源代码的缓存。构建一个 crate 时,Cargo 会将下载的构建依赖项存储在 Cargo 主目录中。您可以通过设置 CARGO_HOME 环境变量 来更改 Cargo 主目录的位置。如果您需要在 Rust crate 中获取此位置信息,home crate 提供了获取此位置的 API。默认情况下,Cargo 主目录位于 $HOME/.cargo/。
请注意,Cargo 主目录的内部结构尚未稳定,随时可能发生变化。
Cargo 主目录包含以下组件:
文件
-
config.tomlCargo 的全局配置文件,参见参考文档中的 config 条目。 -
credentials.tomlcargo login命令生成的私有登录凭据,用于登录到 registry。 -
.crates.toml,.crates2.json这些隐藏文件包含通过cargo install安装的 package 信息。请勿手动编辑!
目录
-
binbin 目录包含通过cargo install或rustup安装的 crate 的可执行文件。为了使这些二进制文件可访问,请将该目录的路径添加到您的$PATH环境变量中。 -
gitGit 源代码存储在此处-
git/db当 crate 依赖于 Git 仓库时,Cargo 会将该仓库克隆为一个裸仓库到此目录中,并在必要时进行更新。 -
git/checkouts如果使用了 Git 源代码,所需的仓库提交会从git/db中的裸仓库检出到此目录中。这为编译器提供了指定依赖项提交的仓库中包含的实际文件。同一个仓库的不同提交可以进行多次检出。
-
-
registrycrate registry(例如 crates.io)的 package 和元数据位于此处。-
registry/indexindex 是一个裸 Git 仓库,其中包含 registry 中所有可用 crate 的元数据(版本、依赖项等)。 -
registry/cache下载的依赖项存储在缓存中。这些 crate 是压缩的 gzip 存档,文件扩展名为.crate。 -
registry/src如果 package 需要已下载的.crate存档,它将被解压到registry/src文件夹中,rustc 将在此处找到.rs文件。
-
在 CI 中缓存 Cargo 主目录
为了避免在持续集成(CI)期间重新下载所有 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.jsonbin/registry/index/registry/cache/git/db/
Vendor 项目的所有依赖项
请参阅 cargo vendor 子命令。
清除缓存
理论上,您可以随时删除缓存的任何部分,Cargo 将尽力恢复源文件,如果 crate 需要它们,它会通过重新解压存档、检出裸仓库或简单地从网络重新下载源文件来恢复。
此外,cargo-cache crate 提供了一个简单的 CLI 工具,用于仅清除缓存的选定部分或在命令行中显示其组件的大小。