如何正确引用相同的代码作为依赖项的依赖项?

Dyl*_*lan 3 rust rust-cargo

我有一个使用Amethyst 游戏引擎的玩具项目。我正在尝试编写自己的System代码来收集用户输入,类似于FlyMovementSystem他们在这里ArcBallRotationSystem实现的。

看来收集鼠标移动的正确方法是通过EventChannel<Event>,它Event来自winitAmethyst 所依赖的板条箱,但不会重新导出。

winit::Event与紫水晶相同的“正确”引用方式是什么?

  • 我应该添加winit到我的Cargo.toml文件中吗?如果是这样,指定版本的推荐方法是什么?(是否可以使用一些关键字代替特定版本号,以允许我“继承”Amethyst 的依赖关系?)
  • 实际上不鼓励引用子依赖项吗?如果是这样,我应该做什么?

She*_*ter 6

目前这个问题还没有很好的解决方案。最好的解决方法是添加对相同版本的传递依赖的直接依赖:

[dependencies]
foo = "0.1" 
bar = "0.2" # `foo` depends on bar 0.2 and we need to keep these in sync
Run Code Online (Sandbox Code Playgroud)

您可以使用诸如手动识别所需版本之cargo tree类的工具,并使您的 Cargo.toml 保持最新。我强烈建议添加一条评论,说明您选择特定版本的原因。foo

如果在不使用底层依赖项的情况下,板条箱很难使用,我还鼓励您向父板条箱提出问题,要求他们重新导出所需的内容。Tokio 板条箱就是一个很好的例子,它重新出口大量的期货板条箱


与您的想法类似,我建议有一种方法使用相同的版本作为依赖项。相反,Cargo 团队选择添加公共依赖和私有依赖的区别。虽然从工程角度来看这将是一个更好的解决方案,但在实施方面却几乎没有取得任何进展。

也可以看看: