依赖关系版本

时间:2018-08-15 01:07:10

标签: dependencies elixir packages versioning

使用以下语法声明对包的依赖关系有什么区别:“ == 1.2.3”(据我所知,在spec中有明确说明)和仅“ 1.2.3” (我也看到正在使用它,但是在脚本中没有解释)?这就像一个软约束,使软件包管理器有更大的自由来解析到另一个版本?

谢谢

3 个答案:

答案 0 :(得分:4)

依赖关系可能被指定为:

  • "== 1.2.3"实际上与"1.2.3"相同,表示“正是这个版本”
  • ">= 1.2.3",意思是“任何大于或等于该版本的版本,包括主要版本的更新”
  • "<= 1.2.3",意思是“不大于该版本的任何版本”
  • "~> 1.2.3",意思是“相同的主要版本,相同的次要版本,其子版本大于或等于3
  • "~> 1.2",意思是“相同的主要版本,任何次要版本大于或等于2

不允许使用语法"~> 1",因为它实际上与">= 1.0.0"相同。

因此,为了获得更大的灵活性,如果人们使用适当的语义版本控制信任程序包,通常会进行"~> 1.2.3""~> 1.2"的操作。不建议使用">= 1.2.3",因为即使使用语义版本控制,主要版本也可能包含重大更改。

答案 1 :(得分:2)

我相信“ 1.2.3”等于“ == 1.2.3”,这是我从未见过的。但很遗憾,我无法提供参考。但是它的行为总是像完全匹配。

更新是的,请看这里: https://github.com/elixir-lang/elixir/blob/f47792547b72ee3043da7205a50e4a1fca2a93dd/lib/elixir/test/elixir/version_test.exs#L52

答案 2 :(得分:1)

根据Version documentation。您所说的是要求

版本:

  

简而言之,版本由三个数字表示

要求:

  

要求允许您指定要使用的给定依赖项的哪个版本。需求支持>=<=>==等常见的运算符,以及像人们期望的那样工作的朋友

Version文档和mix documentation都没有直接要求指定版本号(没有操作符),因此这可能是非标准做法,最好避免。

通常用~>运算符指定要求,因为该要求指定可以使用具有更高最低数字的版本。例如,~> 1.1.0将允许使用1.1.11.1.2等,但不允许使用1.2.0。有一个useful table in the official documentation