我有一个项目具有对iron>= 0.3, <= 0.4
的依赖关系(cookie工具)。合并货物依赖关系
我的项目依赖铁0.3
(所以我可以使用router
中间件,尚未更新到最新的铁)。
当我尝试编译我的项目时,cookie实用程序会拉动0.4
版本的铁,并且由于使用了不同版本的铁,所以出现错误。
不过,我可以这样做:
cargo update -p <cookie utility>
这(通常)变化对铁匹配我现在用的是一个包的依赖,并移除铁0.4
外来的依赖。 (奇怪的是,我有时必须在更新之前运行该命令几次。)
显然,我无法指定依赖项的依赖版本:Set specific version of the dependency of a project's dependency in Cargo.toml or Cargo.lock。
如果货物可能会猜测我想使用单一版本的铁,但我明白为什么它不能。然而,我很困惑为什么cargo update -p <package>
实际上工作;它会更新软件包的依赖关系似乎并不直观。
我想我的第一个真正的问题是:我怎么能指定依赖的依赖版本(当且仅当我想要的版本是支持的版本范围的图书馆内)?我不认为在上面提到的问题中提出的解决方案是理想的。我觉得如果Cargo能够很好地支持这一点会更好,这样图书馆就可以让他们的依赖版本范围保持开放,因为它们的功能允许。
与此同时,我发现这个“诡计”,似乎做我想要的(cargo update -p <pkg>
)。我没有看起来超级难过,但这种行为似乎没有在任何明显的地方描述。我的第二个问题是:这是合并依赖关系的有效方法吗?有什么地方可以找到关于这方面的更多信息吗?
和步骤重现:
- 创建一个新项目:
cargo new --bin ironapp
;cd ironapp
。 - 创建cookie依赖关系:
cargo new cookie_util
。 - 在
cookie_util/Cargo.toml
添加一个依赖项:iron = ">= 0.3, <= 0.4"
。 - 在
Cargo.toml
中添加两个依赖项:iron = "0.3.0"
和cookie_util = { path = "cookie_util"}
。 cargo build
。确认Cargo.lock
需要两种铁质版本。- 运行
cargo update -p cookie_util
任何地方在1和4(或更多)次之间。最终它将消除对iron 0.4.0
的依赖。
我刚刚在rustc-1.10.0/cargo-0.11.0上测试了这个。我确信target
和Cargo.lock
都没有在第1步的开始。
这可能值得创建一个问题[这里](https://github.com/rust-lang/cargo/issues)。 – squiguy
我第二次来自@squiguy的评论;创建一个问题。但是,请确保您在提交问题时提供[MCVE] **。和这里。 – Shepmaster
感谢您的意见。我试图澄清我的问题 –