首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在每个环境中获取Elixir依赖项?

如何在每个环境中获取Elixir依赖项?
EN

Stack Overflow用户
提问于 2017-06-16 14:35:09
回答 2查看 1.6K关注 0票数 5

安装Elixir依赖项有多种方法。我想知道在下列情况下会发生什么情况:

1.

代码语言:javascript
运行
复制
mix deps.get --only prod

那么,究竟获取了哪些依赖项呢?

2.

代码语言:javascript
运行
复制
defp deps do
  [
    {:credo, "~> 0.8", only: ~w(dev)a, runtime: false},
  ]
end

only选项对特定依赖项的影响如何?

3.

代码语言:javascript
运行
复制
def project do
  [
    # ...
    deps: deps(Mix.env()),
  ]
end

如果我们指定这样的依赖项,那么有什么区别呢?

我有点搞不懂什么时候该用什么来定义依赖关系。

EN

回答 2

Stack Overflow用户

发布于 2017-06-16 14:55:05

当你写这个时:

mix deps.get --only prod

它将获取prod环境的所有依赖项,即没有only选项的依赖项,以及指定了only选项并包含:prod (例如{:some_dep, "~> 0.8", only: [:prod]})的依赖项。

当你写这个时:

代码语言:javascript
运行
复制
defp deps do
  [
    {:some_dep, "~> 0.8"}
  ]
end

这告诉mix在中安装任何运行的环境。

当你写这个时:

代码语言:javascript
运行
复制
defp deps do
  [
    {:another_dep, "~> 0.8", only: [:dev]}
  ]
end

它告诉mix只在您的环境是dev (MIX_ENV=dev)时才安装MIX_ENV=dev。如果您在任何其他环境(例如prod)中,mix deps.get只会忽略another_dep而不会安装它。

写这篇文章:

代码语言:javascript
运行
复制
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分离都已经得到了处理:)

票数 5
EN

Stack Overflow用户

发布于 2017-06-16 14:57:26

我要用相反的顺序来解决这些问题。

如果在多个环境中使用依赖项,则使用deps(Mix.env)将强制您多次指定每个依赖项。与…有关的东西

代码语言:javascript
运行
复制
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。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44591922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档