Elixir - 如何动态获取项目中使用的库版本?
问题描述:
我在我工作的其中一个项目中使用获取依赖项版本时遇到问题。我想在我的代码中获取这个依赖的版本。有没有简单的方法来做到这一点?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
设置这可能会返回一个空数组。有没有什么可靠的方法来做到这一点,除了做一个函数在依赖返回它自己的版本?
答
您可以使用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'
非常感谢你,这很好地解决了我的问题:) –