以编程方式确定Elixir Mix任务中的依赖项版本

以编程方式确定Elixir Mix任务中的依赖项版本,elixir,phoenix,elixir-mix,hex-pm,Elixir,Phoenix,Elixir Mix,Hex Pm,有没有办法以编程方式在自定义混合任务中指定已安装依赖项的当前版本 我有一个包,其中包含一些运行一些生成器命令的自定义混合任务。我想确定hex包的用户正在运行的Phoenix版本,这样我就可以在生成器任务中有条件地执行一些逻辑 我的十六进制软件包依赖于Phoenix,但也支持Phoenix 1.3、1.4和新发布的1.5 我意识到我可以发布一个新版本的hex包,它有一个固定的phoenix 1.5依赖性要求,同时仍然可以将更改移植到我包的旧的主要版本;但我更愿意保留一个主线分支,目前支持尽可能多的

有没有办法以编程方式在自定义混合任务中指定已安装依赖项的当前版本

我有一个包,其中包含一些运行一些生成器命令的自定义混合任务。我想确定hex包的用户正在运行的Phoenix版本,这样我就可以在生成器任务中有条件地执行一些逻辑

我的十六进制软件包依赖于Phoenix,但也支持Phoenix 1.3、1.4和新发布的1.5

我意识到我可以发布一个新版本的hex包,它有一个固定的phoenix 1.5依赖性要求,同时仍然可以将更改移植到我包的旧的主要版本;但我更愿意保留一个主线分支,目前支持尽可能多的版本


有没有一种“体面”的方法可以做到这一点,或者我应该自己在mix任务中解析
mix.lock
文件?这样做似乎很脆弱,我认为我的包代码不应该搜索和解析它所包含的更大项目的锁文件。

我还没有针对您的确切需求测试过它,但您可能可以这样做:

app_version =
  Application.spec(:phoenix)[:vsn]
  |> List.to_string()
# OR
:application.get_key(:phoenix, :vsn)
|> List.to_string()
以下代码段可能也很有用:如果您有一个模块,但不知道它所属的atom应用程序名称:

app_name = Application.get_application(SomeApp)
有关更多详细信息,请参阅


希望能有帮助。

啊,非常感谢。我只是在
Mix
模块相关代码中四处窥探,没有想到要查看
Mix
名称空间之外的内容。
Application.spec(:phoenix,:vsn)
应该可以让我到达那里。