2017-10-11 12 views
1

J'ai un problème avec la récupération de la version de dépendance que j'utilise dans l'un des projets sur lesquels je travaille. Je veux récupérer la version de cette dépendance dans mon code. Y a-t-il un moyen facile de faire cela?Elixir - comment récupérer dynamiquement la version de bibliothèque utilisée dans le projet?

J'ai essayé des méthodes suivantes:

{:ok, dependency_version} = Mix.Dep.cached 
          |> Enum.filter(fn(d) -> d.app == :dependency_name end) 
          |> hd 
          |> Map.fetch!(:status) 

Mais comme je peux lire dans docs dans de Mix.dep.cached cela peut retourner un tableau vide si MIX_NO_DEPS est réglé. Y at-il un moyen fiable de faire cela en dehors de faire une fonction dans la dépendance qui renvoie la version de lui-même?

Répondre

3

Vous pouvez obtenir la version de la dépendance en utilisant Application.spec/2, en passant le nom de la dépendance comme premier argument et :vsn comme deuxième argument.

De l'exemple d'application de maître Ecto:

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

Merci beaucoup, cela résout bien mon problème :) –