elixir - 仅获取产品组合依赖项
问题描述
有:
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
但是会因信条之类的依赖项而崩溃。
我可以:prod
只检索依赖项吗?因为只过滤掉:[:dev, :test], runtime: false
有点棘手
解决方案
首先,关于您收到错误的原因。在您的示例中,此调用
MixProject.project()
|> Keyword.get(:deps)
返回 aList
而不是 aKeyword List
这是下一行所期望的
|> Keyword.keys()
这就是为什么它与可以假设的崩溃
** (FunctionClauseError) no function clause matching in anonymous fn/1 in Keyword.keys/1
正如您所指出的,它专门针对那些未由两项元组描述的依赖项而崩溃,因此不代表 a 的元素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]
,但可以对其进行重新设计以避免这种情况。
推荐阅读
- css - wordpress css sprite 加载图片
- node.js - Mongoose - 为字段的每个唯一值计算文档
- javascript - Javascript:访问单个元素时,对象数组返回未定义。即使其中保存了 696 个对象
- google-cloud-platform - 在 Google 数据洞察中的多个来源的单个页面中添加多个图表
- sql-server - 使用 Windows 凭据通过计算机名称连接到 SQL 实例时出现问题,但可以通过 FQDN 连接
- javascript - 使用 js-xlsx 样式化 xlsx 文件
- python - 我应该在我的 conda environment.yml 中包含辅助依赖项吗?
- laravel - 选择关系表中的某个字段
- python-3.x - tkinter 中使用 PhotoImage 的两个图像
- html - lxml xpath - 找不到正文标签