2017-10-11 78 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

非常感謝你,這很好地解決了我的問題:) –

相關問題