Elixir 仅获取产品混合依赖项

Elixir 仅获取产品混合依赖项,elixir,elixir-mix,Elixir,Elixir Mix,具有: 我这样做是为了确保启动所有依赖项: defp deps do [ {:poison, "~> 3.0"}, {:credo, "~> 0.10.0", only: [:dev, :test], runtime: false} ] end 但是,它与:dev依赖项(如信条)的冲突 我可以仅检索依赖项吗?由于只过滤掉:[:dev,:test],运行时:false有点棘手首先,关于出现错误的原因。在您的示例中,此调用 MixProj

具有:

我这样做是为了确保启动所有依赖项:

  defp deps do
    [
      {:poison, "~> 3.0"},
      {:credo, "~> 0.10.0", only: [:dev, :test], runtime: false}
    ]
  end
但是,它与
:dev
依赖项(如信条)的冲突


我可以仅检索依赖项吗?由于只过滤掉:
[:dev,:test],运行时:false有点棘手

首先,关于出现错误的原因。在您的示例中,此调用

MixProject.project()
|> Keyword.get(:deps)
|> Keyword.keys()
|> Enum.each(fn dep ->
  Application.ensure_all_started(dep)
end
返回一个
列表
,而不是下一行所需的
关键字列表

MixProject.project()
|> Keyword.get(:deps)
这就是为什么它会崩溃的原因

|> Keyword.keys()
正如您所指出的,它在那些不由两项元组描述的依赖项上特别崩溃,因此不表示
关键字列表的元素


现在进入你问题的核心。正如您所指出的,您可以手动筛选DEP,但类似这样的场景会让操作变得相当繁琐:

** (FunctionClauseError) no function clause matching in anonymous fn/1 in Keyword.keys/1
另一种方法是根据环境动态生成deps列表,例如:

{:dep_one, "~> 1.0"},
{:dep_two, "~> 1.0", only: [:prod]},
{:dep_three, "~> 1.0", except: [:dev, :test]}

这种过于简单的实现需要为多个环境定义重复的DEP定义,例如仅
:[:dev,:test]
,但可以对其进行修改以避免出现这种情况。

首先,请说明出现错误的原因。在您的示例中,此调用

MixProject.project()
|> Keyword.get(:deps)
|> Keyword.keys()
|> Enum.each(fn dep ->
  Application.ensure_all_started(dep)
end
返回一个
列表
,而不是下一行所需的
关键字列表

MixProject.project()
|> Keyword.get(:deps)
这就是为什么它会崩溃的原因

|> Keyword.keys()
正如您所指出的,它在那些不由两项元组描述的依赖项上特别崩溃,因此不表示
关键字列表的元素


现在进入你问题的核心。正如您所指出的,您可以手动筛选DEP,但类似这样的场景会让操作变得相当繁琐:

** (FunctionClauseError) no function clause matching in anonymous fn/1 in Keyword.keys/1
另一种方法是根据环境动态生成deps列表,例如:

{:dep_one, "~> 1.0"},
{:dep_two, "~> 1.0", only: [:prod]},
{:dep_three, "~> 1.0", except: [:dev, :test]}

这种过于简单的实现需要为多个环境定义重复的DEP定义,例如仅
:[:dev,:test]
,但可以对其进行修改以避免出现这种情况。

是否将应用程序的名称传递给
应用程序。确保所有已启动的
都不起作用?启动应用程序将启动所有未启动的依赖项。这适用于混合任务,其中我的应用程序未运行类似的操作,但我添加了所有依赖项,因为我有很多强制依赖项。是否将应用程序的名称传递给
应用程序。确保\u all \u start
不起作用?启动应用程序将启动所有未启动的依赖项。这适用于混合任务,其中我的应用程序未运行类似的操作,但我添加了所有依赖项,因为我有很多强制依赖项