Elixir - 如何动态获取项目中使用的库版本?
Elixir - how to dynamically fetch library version used in project?
我在获取我从事的其中一个项目中使用的依赖项版本时遇到问题。我想在我的代码中获取此依赖项的版本。有什么简单的方法吗?
我尝试了以下方法:
{:ok, dependency_version} = Mix.Dep.cached
|> Enum.filter(fn(d) -> d.app == :dependency_name end)
|> hd
|> Map.fetch!(:status)
但是正如我在 Mix.dep.cached
的文档中所读到的,如果设置了 MIX_NO_DEPS
,这可能 return 是一个空数组。除了使函数依赖于 return 自身的版本之外,还有什么可靠的方法可以做到这一点吗?
您可以使用 Application.spec/2
获取依赖项的版本,将依赖项的名称作为第一个参数传递,将 :vsn
作为第二个参数传递。
来自 Ecto master 的示例应用程序:
$ iex -S mix
iex(1)> Application.spec(:ecto, :vsn)
'3.0.0-dev'
iex(2)> Application.spec(:postgrex, :vsn)
'0.14.0-dev'
我在获取我从事的其中一个项目中使用的依赖项版本时遇到问题。我想在我的代码中获取此依赖项的版本。有什么简单的方法吗?
我尝试了以下方法:
{:ok, dependency_version} = Mix.Dep.cached
|> Enum.filter(fn(d) -> d.app == :dependency_name end)
|> hd
|> Map.fetch!(:status)
但是正如我在 Mix.dep.cached
的文档中所读到的,如果设置了 MIX_NO_DEPS
,这可能 return 是一个空数组。除了使函数依赖于 return 自身的版本之外,还有什么可靠的方法可以做到这一点吗?
您可以使用 Application.spec/2
获取依赖项的版本,将依赖项的名称作为第一个参数传递,将 :vsn
作为第二个参数传递。
来自 Ecto master 的示例应用程序:
$ iex -S mix
iex(1)> Application.spec(:ecto, :vsn)
'3.0.0-dev'
iex(2)> Application.spec(:postgrex, :vsn)
'0.14.0-dev'