Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 为什么需要在项目中列出库依赖项';s应用程序?_Elixir_Otp - Fatal编程技术网

Elixir 为什么需要在项目中列出库依赖项';s应用程序?

Elixir 为什么需要在项目中列出库依赖项';s应用程序?,elixir,otp,Elixir,Otp,将库依赖项(仅提供函数)列为应用程序的目的是什么 例如,当它只提供简单功能时,项目建议将其作为应用程序包含 def application do [applications: [:left_pad]] end 长生不老药包是否应始终作为应用程序提供?新的库开发人员如何使其依赖项作为应用程序可用?这还提供了哪些其他功能?每个运行时依赖项都应添加到应用程序列表中。包是只提供函数还是运行进程是一个实现细节,用户不应该关心 此外,由于Erlang可以动态加载代码,我的理解是,将应用程序添加到依赖项

将库依赖项(仅提供函数)列为应用程序的目的是什么

例如,当它只提供简单功能时,项目建议将其作为应用程序包含

def application do
  [applications: [:left_pad]]
end

长生不老药包是否应始终作为应用程序提供?新的库开发人员如何使其依赖项作为应用程序可用?这还提供了哪些其他功能?

每个运行时依赖项都应添加到应用程序列表中。包是只提供函数还是运行进程是一个实现细节,用户不应该关心

此外,由于Erlang可以动态加载代码,我的理解是,将应用程序添加到依赖项列表中可以确保以正确的顺序加载模块。这在不属于您的应用程序或任何依赖项的模块根本不包含在版本中的版本中尤其重要

关于为什么有两个地方可以定义依赖关系的问题:
deps
应用程序

  • deps
    -主要是关于您需要从其他地方获取的包和代码
  • 应用程序
    -是关于运行时依赖关系的。您可能在
    deps
    中声明了一些仅编译时的依赖项,但由于它不是运行时依赖项,因此不需要包含在
    应用程序中

    • 看看这个问题:

      基本上,应用程序所依赖的所有应用程序都保证在应用程序启动之前启动

      但是,如果应用程序中的某个函数调用尚未加载的模块中的另一个函数,并且该模块位于从返回的路径之一,则VM仍将自动加载该模块

      但是,当使用release handler进行发布时(有关更多信息,请参见),只有特定的应用程序才会进入发布中—您在
      reltool.config
      中明确指定的应用程序以及依赖的应用程序。如果您的应用程序使用库应用程序,而您既没有在应用程序文件中也没有在发布配置文件中列出它,那么它将不会部署到生产系统,并且您的应用程序将无法从库应用程序调用函数

      是的,如 MigalMulkala 所指出的,依赖列表也是发布处理程序在考虑使用.

      升级版本时正在重新加载模块的顺序时考虑的因素。 所以,总而言之,这在开发环境中并不重要,但这是一个很好的实践,并且在将东西部署到生产环境中时,如果您正在进行适当的Erlang发布,这是必需的