仅获取产品组合依赖项
get only prod mix dependencies
拥有:
defp deps do
[
{:poison, "~> 3.0"},
{:credo, "~> 0.10.0", only: [:dev, :test], runtime: false}
]
end
我正在做这样的事情来确保所有依赖项都已启动:
MixProject.project()
|> Keyword.get(:deps)
|> Keyword.keys()
|> Enum.each(fn dep ->
Application.ensure_all_started(dep)
end
但是会崩溃 :dev
像 credo 这样的依赖项。
我可以只检索 :prod
依赖项吗?因为只过滤掉:[:dev, :test], runtime: false
有点棘手
首先,关于您收到错误的原因。在您的示例中,此调用
MixProject.project()
|> Keyword.get(:deps)
returns 是 List
而不是 Keyword List
,这是下一行所期望的
|> Keyword.keys()
这就是为什么它会崩溃的原因
** (FunctionClauseError) no function clause matching in anonymous fn/1 in Keyword.keys/1
正如您所指出的,它特别针对那些未由两项元组描述的依赖项崩溃,因此不代表 Keyword List
.
的元素
现在进入你问题的核心。正如您所指出的,您可以手动过滤 deps,但像这样的场景使它变得相当乏味:
{:dep_one, "~> 1.0"},
{:dep_two, "~> 1.0", only: [:prod]},
{:dep_three, "~> 1.0", except: [:dev, :test]}
另一种方法是根据环境动态构建您的 deps 列表,例如:
defp deps do
[
# universal deps go here
] ++ deps(Mix.env)
end
defp deps(env) when env == :dev do
[
# dev-only deps
]
end
defp deps(env) when env == :test do
[
# test-only deps
]
end
defp deps(env) when env == :prod do
[
# prod-only deps
]
end
这种简单的实现需要为多个环境定义的 deps 的重复定义,例如 only: [:dev, :test]
,但可以重新设计以避免这种情况。
拥有:
defp deps do
[
{:poison, "~> 3.0"},
{:credo, "~> 0.10.0", only: [:dev, :test], runtime: false}
]
end
我正在做这样的事情来确保所有依赖项都已启动:
MixProject.project()
|> Keyword.get(:deps)
|> Keyword.keys()
|> Enum.each(fn dep ->
Application.ensure_all_started(dep)
end
但是会崩溃 :dev
像 credo 这样的依赖项。
我可以只检索 :prod
依赖项吗?因为只过滤掉:[:dev, :test], runtime: false
有点棘手
首先,关于您收到错误的原因。在您的示例中,此调用
MixProject.project()
|> Keyword.get(:deps)
returns 是 List
而不是 Keyword List
,这是下一行所期望的
|> Keyword.keys()
这就是为什么它会崩溃的原因
** (FunctionClauseError) no function clause matching in anonymous fn/1 in Keyword.keys/1
正如您所指出的,它特别针对那些未由两项元组描述的依赖项崩溃,因此不代表 Keyword List
.
现在进入你问题的核心。正如您所指出的,您可以手动过滤 deps,但像这样的场景使它变得相当乏味:
{:dep_one, "~> 1.0"},
{:dep_two, "~> 1.0", only: [:prod]},
{:dep_three, "~> 1.0", except: [:dev, :test]}
另一种方法是根据环境动态构建您的 deps 列表,例如:
defp deps do
[
# universal deps go here
] ++ deps(Mix.env)
end
defp deps(env) when env == :dev do
[
# dev-only deps
]
end
defp deps(env) when env == :test do
[
# test-only deps
]
end
defp deps(env) when env == :prod do
[
# prod-only deps
]
end
这种简单的实现需要为多个环境定义的 deps 的重复定义,例如 only: [:dev, :test]
,但可以重新设计以避免这种情况。