Программное определение версии зависимости в задаче 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)
См. Дополнительную информацию в документации по приложению.
Надеюсь, это поможет.