为什么 MIX 依赖项在依赖项的语义版本之前有一个“~>”?

Why does MIX dependencies have a "~>" before the semantic version of the dependency?

mix.exs 上,您可以声明如下依赖项:

def deps do
  [{:plug, "~> 1.0"}]
end

为什么元组的第二部分需要有“~>”而不是简单的版本。

我看到如果它从git获取依赖,你可以这样写依赖:

def deps do
  [{:plug, git: "git://github.com/elixir-lang/plug.git"}]
end

Version 模块支持这个奇特的箭头。它以数字设置的精度对您的依赖项进行舍入,该数字是最具体的数字的左邻居。

来自文档:

# 2.0.0 and later until 2.1.0
">= 2.0.0 and < 2.1.0"

Since the example above is such a common requirement, it can be expressed as:

"~> 2.0.0"

查看 Version 模块中的更多示例。

基本上这是为了您的方便,因为它允许您在任何时候自动升级您的开发人员 mix deps.upgrade,但它允许您控制升级 - 您可以下载升级,这会使您当前的代码库崩溃等。