何时在Elixir中使用仅编译依赖项

时间:2015-05-15 11:13:27

标签: elixir exrm

何时仅在deps中的mix.exs中指定依赖项,而不是applications中的运行时依赖项?

我认为applications是在我自己的应用程序启动之前需要启动的实际应用程序,但我遇到了exrm没有放置{{1}的问题我将库(我认为只包含纯函数)放入发行版中,直到我在Jazz中包含:jazz

1 个答案:

答案 0 :(得分:5)

OTP应用程序更像是一个组件 - 一组可能(但不一定)运行某些进程的模块和函数。如果OTP应用程序没有启动自己的监督树,则称为库应用程序。无论哪种方式,如果在运行时使用某些libs函数,则需要将其指定为运行时dep。

相比之下,编译时依赖性仅确保第三方代码被提取并在本地可用(在您的开发/构建计算机上)。如果第三方代码在运行时之外发挥其神奇作用,这将非常有用。一个例子可能是我自己的ExActor或纯Erlang meck模拟库。在第一种情况下,ExActor在编译期间发挥其魔力,而在第二种情况下,您只需要在测试期间使用模拟库。