何时在 Elixir 中使用只编译依赖

When to use compile-only dependencies in Elixir

什么时候只在我的 mix.exs 中指定 deps 中的依赖关系而不是 applications 中的 运行 时间依赖关系?

我认为 applications 是需要先启动我自己的应用程序才能启动的实际应用程序,但我 运行 遇到了 exrm 没有将Jazz 库(我认为它只包含纯函数)到发行版中,直到我将 :jazz 包含在 applications.

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

相比之下,编译时依赖性仅确保获取第 3 方代码并在本地可用(在您的 dev/build 机器上)。如果第 3 方代码在 运行 时间之外发挥其魔力,这将很有用。我自己的 ExActor or pure Erlang meck 模拟库就是一个例子。在第一种情况下,ExActor 在编译期间发挥其魔力,而在第二种情况下,您仅在测试期间需要模拟库。