1

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

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

我的 hex 包依赖于 Phoenix,但也支持 Phoenix 1.3、1.4 和新发布的 1.5。

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

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

4

1 回答 1

1

我还没有根据您的确切要求对此进行测试,但是您可以执行以下操作:

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)

有关更多详细信息,请参阅应用程序文档

希望有帮助。

于 2020-04-23T16:03:00.563 回答