依赖管理

包可以通过在它的Cargo.toml文件的[dependencies]部分列出其他包来依赖它们。指定依赖最常用的方式是提供其名称和版本号:

[dependencies]
thiserror = "1"

这样会将thiserror作为依赖添加到你的包中,其最低版本为1.0.0thiserror将会从Rust的官方包注册中心crates.io获取。当你运行cargo build时,cargo会经历几个阶段:

  • 依赖解析
  • 下载依赖
  • 编译项目(包括你自己的代码和依赖)

如果你的项目有Cargo.lock文件,并且你的清单文件未发生变化,那么依赖解析步骤将被跳过。锁定文件是cargo在成功完成一轮依赖解析后自动生成的,它包含了项目中所有依赖的确切版本,用于确保在不同构建环境(例如CI)中始终使用相同版本的依赖。如果你正在与多位开发者共同开发项目,应当将Cargo.lock文件提交到版本控制系统中。

你可以使用cargo update命令来更新Cargo.lock文件,使其包含所有依赖的最新(兼容)版本。

路径依赖

你也可以通过路径来指定依赖,这对于处理多个本地包时非常有用。

[dependencies]
my-library = { path = "../my-library" }

这个路径是相对于声明依赖的包的Cargo.toml文件而言的。

其他来源

查阅Cargo文档以了解更多关于如何在Cargo.toml文件中指定依赖以及从何处获取依赖的信息。

开发依赖

你还可以指定仅在开发过程中需要的依赖项,也就是说,只有在运行cargo test时它们才会被引入。这类依赖应放在Cargo.toml文件的[dev-dependencies]部分:

[dev-dependencies]
static_assertions = "1.1.0"

本书中,我们已经使用了几个这样的依赖来简化测试代码。

参考资料

  • 本节练习位于 exercises/05_ticket_v2/11_dependencies