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

Posted

技术标签:

【中文标题】为啥 MIX 依赖在依赖的语义版本之前有一个“~>”?【英文标题】:Why does MIX dependencies have a "~>" before the semantic version of the dependency?为什么 MIX 依赖在依赖的语义版本之前有一个“~>”? 【发布时间】:2018-05-03 19:19:55 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

Version 模块支持这个花哨的箭头。它以数字设置的精度四舍五入您的依赖关系,该数字与最具体的数字相邻。

来自文档:

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

由于上面的例子是这样一个常见的需求,所以可以表示为:

"~> 2.0.0"

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

基本上这是为了您的方便,因为它允许您在执行mix deps.upgrade 时自动升级您的部门,但它可以让您控制升级 - 您可以下载升级,这会导致您当前的代码库崩溃等。

【讨论】:

以上是关于为啥 MIX 依赖在依赖的语义版本之前有一个“~>”?的主要内容,如果未能解决你的问题,请参考以下文章

在 Gradle 中对依赖项使用语义版本控制

如何下载非依赖工件作为语义版本控制的 buildScript 块的一部分

Semver (Semantic Versioning) 语义化版本号

语义化版本

语义化版本 2.0.0

为啥在构建依赖库之前没有开始编译目标可执行文件?