最低的依赖版本

问题描述 投票:1回答:1

我正在建立一个几乎没有依赖关系的板条箱,为了发布它,我必须指定依赖关系的版本。因此,我将dep = "*"替换为dep = ">=N",并用N代表每个部门在cargo update之后可以获得的最新版本。

发布时使用最新版本的依赖关系是一种好习惯吗?

我应该放松/降低所需的版本吗?

我该怎么办?我尝试将dep = "M"设置为较低的版本号,但M仍在使用较新的版本。是否有工具可以找到构建和测试我的板条箱所需的最低cargo

谢谢。

rust dependency-management rust-cargo
1个回答
0
投票

M下,《货运手册》规定:

货物烘烤了The version field的概念,因此请确保遵循一些基本规则:

  • 在达到1.0.0之前,一切顺利,但是如果您进行了重大更改,请增加次要版本。在Rust中,重大更改包括向结构添加字段或为枚举添加变体。
  • 1.0.0之后,只有在增加主版本时才进行重大更改。不要破坏构建。
  • 1.0.0之后,请不要在补丁程序级别的版本中添加任何新的公共API(没有新的version任何内容)。如果添加任何新的Semantic Versioning结构,特征,字段,类型,函数,方法或其他任何内容,请始终增加次要版本。
  • 使用具有三个数字部分的版本号,例如1.0.0而不是1.0。

如果依赖项的维护者已采用并正确应用了这些规则,则在给定该依赖项的特定版本(您知道自己要使用的工具箱)之后,相同主版本的任何后续修补程序发行版总是[[should

有效,并且相同的主要版本应该的后续次要发行版也始终有效,只要主要版本不为0。作为pub,您可以使用插入符号前缀指定您想要最新的此类“兼容”版本。他指导您转到pub上货运书的一章,该章解释:

保养要求

Caret要求允许SemVer兼容的更新到指定版本。如果新版本号未修改主要,次要修补程序分组中最左边的非零数字,则允许进行更新。在这种情况下,如果我们运行Herman L alludes,则货物应该将我们更新为Specifying Dependencies版本(如果它是最新的cargo update -p time版本),但不会将我们更新为0.1.13版本。相反,如果我们将版本字符串指定为0.1.z,则如果它是最新的0.2.0版本,则货物应更新为^1.0,而不是1.1。不认为版本1.y与任何其他版本兼容。这里是插入符号要求的更多示例以及它们所允许的版本:

^ 1.2.3:=> = 1.2.3,<2.0.0^ 1.2:=> = 1.2.0,<2.0.0^ 1:=> = 1.0.0,<2.0.0^ 0.2.3:=> = 0.2.3,<0.3.0^ 0.2:=> = 0.2.0,<0.3.0^ 0.0.3:=> = 0.0.3,<0.0.4^ 0.0:=> = 0.0.0,<0.1.0^ 0:=> = 0.0.0,<1.0.0

此兼容性约定与SemVer的区别在于它处​​理1.0.0之前的版本的方式。尽管SemVer说1.0.0之前没有兼容性,但Cargo认为2.00.0.x兼容,其中0.x.y0.x.z

但是,当然,某些软件包维护者可能会忽略SemVer,而采用其他版本控制方案;可能尝试使用SemVer,但应用不正确;或可能无意间做出重大更改而没有意识到。幸运的是,最受欢迎的板条箱相当活跃且维护良好,而根据我的经验,此类问题相对罕见。 Rust的强类型系统还通过防止许多此类重大更改甚至被编译而提供了一些额外的保护,因此它们通常很早就被捕获。

当然,所有重大更改都应由集成测试(构建管道始终确保发布之前通过该测试,对吗?)进行。 Dependabot之类的组件也可以提醒您发布后更新的依赖项(例如,通过创建PR),这又可以触发CI管道针对新的依赖项版本立即运行测试套件并报告结果。

也许有充分的理由采用不同的方法,但是在大多数情况下,上述做法在很大程度上是明智的。

© www.soinside.com 2019 - 2024. All rights reserved.