安装Elixir依赖项有多种方法。我想知道在下列情况下会发生什么情况:
1.
mix deps.get --only prod那么,究竟获取了哪些依赖项呢?
2.
defp deps do
[
{:credo, "~> 0.8", only: ~w(dev)a, runtime: false},
]
endonly选项对特定依赖项的影响如何?
3.
def project do
[
# ...
deps: deps(Mix.env()),
]
end如果我们指定这样的依赖项,那么有什么区别呢?
我有点搞不懂什么时候该用什么来定义依赖关系。
发布于 2017-06-16 14:55:05
当你写这个时:
mix deps.get --only prod
它将获取prod环境的所有依赖项,即没有only选项的依赖项,以及指定了only选项并包含:prod (例如{:some_dep, "~> 0.8", only: [:prod]})的依赖项。
当你写这个时:
defp deps do
[
{:some_dep, "~> 0.8"}
]
end这告诉mix在中安装任何运行的环境。
当你写这个时:
defp deps do
[
{:another_dep, "~> 0.8", only: [:dev]}
]
end它告诉mix只在您的环境是dev (MIX_ENV=dev)时才安装MIX_ENV=dev。如果您在任何其他环境(例如prod)中,mix deps.get只会忽略another_dep而不会安装它。
写这篇文章:
def project do
[
# ...
deps: deps(Mix.env()),
]
end将导致** (CompileError) mix.exs:13: undefined function deps/1,因为在您的mix.exs中,只定义了deps/0。现在你可以告诉我为什么不实现deps(:dev),deps(:prod)等等.好吧,如果您阅读我前面解释过的内容,您会发现这是没有意义的,因为每个环境的dep分离都已经得到了处理:)
发布于 2017-06-16 14:57:26
我要用相反的顺序来解决这些问题。
如果在多个环境中使用依赖项,则使用deps(Mix.env)将强制您多次指定每个依赖项。与…有关的东西
def deps(:dev) do
[
{:ecto, "~> 2.1"}
{:credo, "~> 0.8", runtime: false}
]
end
def deps(:test) do
[
{:ecto, "~> 2.1"}
]
end我承认,我甚至不知道这是否有效,但是如果您只指定了:only选项,那么已经为您处理的内容添加了太多的代码。
使用:only可以指定应该在哪些环境中使用依赖项。在您的示例中,{:credo, "~> 0.8", only: [:dev], runtime: false}告诉mix只应该在dev环境中使用credo包。如果不包括:only选项,则包将在所有环境中使用。
$ mix deps.get --only prod只检索与生产环境相关的包。从前面的示例中,credo包将不会被检索,因为您告诉mix只应该在dev环境中使用credo。
https://stackoverflow.com/questions/44591922
复制相似问题