Программное определение версии зависимости в задаче Elixir Mix

Есть ли способ программно изменить текущую версию установленной зависимости в пользовательской задаче Mix?

У меня есть пакет, который включает несколько настраиваемых задач Mix, которые запускают некоторые команды генератора. Я хочу определить версию Phoenix, которую использует пользователь моего шестнадцатеричного пакета, чтобы я мог условно выполнять некоторую логику в своих задачах генератора.

Мой шестнадцатеричный пакет зависит от Phoenix, но также поддерживает Phoenix 1.3, 1.4 и недавно выпущенную версию 1.5.

Я понимаю, что могу выпустить новую версию шестнадцатеричного пакета, которая имеет фиксированное требование зависимости от Phoenix 1.5, при этом сохраняя обратный перенос изменений в более старые основные версии моего пакета; но я бы предпочел пока сохранить одну основную ветку, которая поддерживает как можно больше версий.

Есть ли "достойный" способ сделать это, или мне следует разобрать mix.lockзаписываю себя в задачу смешивания? Это кажется довольно хрупким, и я не думаю, что код моего пакета должен искать и анализировать файл блокировки более крупного проекта, в который он включен.

1 ответ

Решение

Я не проверял это на соответствие вашим конкретным требованиям, но вы можете сделать что-то вроде этого:

app_version =
  Application.spec(:phoenix)[:vsn]
  |> List.to_string()

Следующий фрагмент также может быть полезен: если у вас есть модуль, но вы не знаете имя приложения Atom, которому он принадлежит:

app_name = Application.get_application(SomeApp)

См. Дополнительную информацию в документации по приложению.

Надеюсь, это поможет.

Другие вопросы по тегам