2017-10-11 77 views
1

我在我工作的其中一个项目中使用获取依赖项版本时遇到问题。我想在我的代码中获取这个依赖的版本。有没有简单的方法来做到这一点?Elixir - 如何动态获取项目中使用的库版本?

我尝试以下方法:

{: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设置这可能会返回一个空数组。有没有什么可靠的方法来做到这一点,除了做一个函数在依赖返回它自己的版本?

回答

3

您可以使用Application.spec/2获取依赖项的版本,将依赖项的名称作为第一个参数,并将:vsn作为第二个参数。

从外生大师的示例应用程序:

$ iex -S mix 
iex(1)> Application.spec(:ecto, :vsn) 
'3.0.0-dev' 
iex(2)> Application.spec(:postgrex, :vsn) 
'0.14.0-dev' 
+0

非常感谢你,这很好地解决了我的问题:) –

相关问题