如何包含来自deps的模块并在elixir中使用它?

时间:2018-07-19 05:46:03

标签: elixir

我想使用模块HTTPoison。如何使用?

我的mix.exs文件:

defmodule Api.MixProject do
  use Mix.Project

  def project do
    [
      app: :api,
      version: "0.1.0",
      elixir: "~> 1.6",
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end

  def application do
    [
      application: [:httpoison]
    ]
  end

  defp deps do
    [
      {:httpoison, "~> 1.0"}
    ]
  end
end

我试图将其导入模块中:

defmodule Api do
  use HTTPoison

  def hello do
    :hello
  end
end

...但是会引发错误:

  

**(UndefinedFunctionError)函数HTTPoison .__ using __ / 1是未定义或私有的

是否有一种方法可以使它成为全局软件包,并将其导入到exs文件中而无需创建整个项目?

2 个答案:

答案 0 :(得分:3)

看看GitHub docs,您可能会发现它对于创建自己的API很有用。例如:

defmodule Api do
  use HTTPoison.Base

  def hello do
    :hello
  end
end

答案 1 :(得分:2)

在没有importuse的情况下,只要您将HTTPoison指定为部门,HTTPpoison就可以正常工作(就像您所做的那样)。我尝试过使用此功能:

defmodule API do
    def start, do: HTTPoison.start |> IO.inspect
end

iex -S mix中:

iex(3)> API.start
{:ok, []}
{:ok, []}

如果您想将use HTTPoison.Base的某些功能包装在自己的API中,可以使用HTTPoison,如@IgorDrozdov所述。

对于您问题的最后一部分,请看@Dogbert的this answer,我找不到更好的解决方案:这是一种解决方法,没有现成的命令可以解决允许您导入外部库,例如在ruby脚本中需要require。