我想在没有创建混合项目的情况下试用Poison json模块.
如何安装并通过导入使其在iex中可用?
我已经能够将它添加到项目中,然后在进入项目目录并使用iex -S mix后使用它:
tbrowne@LILJEN:~/code/elixirTry/pj$ cat mix.exs
defmodule Pj.Mixfile do
use Mix.Project
def project do
[app: :pj,
version: "0.0.1",
elixir: "~> 1.2",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
deps: deps]
end
# Configuration for the OTP application
#
# Type "mix help compile.app" for more information
def application do
[applications: [:logger]]
end
# Dependencies can be Hex packages:
#
# {:mydep, "~> 0.3.0"}
#
# Or git/path repositories:
#
# {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
#
# Type "mix help deps" for more examples and options
defp deps do
[{:poison, "~> 2.0"}]
end
end
tbrowne@LILJEN:~/code/elixirTry/pj$ cat lib/pj.ex
defmodule Person do
@derive [Poison.Encoder]
defstruct [:name, :age]
end
defmodule Pj do
xx = Poison.encode!(%Person{name: "Devin Torres", age: 27})
end
tbrowne@LILJEN:~/code/elixirTry/pj$ iex -S mix
Erlang/OTP 18 [erts-7.2] [source-e6dd627] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]
Interactive Elixir (1.2.3) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> import Poison
nil
iex(2)>
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是进入通用目录中的普通iex,那么我似乎无法访问Poison库:
iex(4)> import IO
nil
iex(5)> puts("hello")
hello
:ok
iex(6)> import Poison
** (CompileError) iex:6: module Poison is not loaded and could not be found
Run Code Online (Sandbox Code Playgroud)
另外,如何从github全局安装库?
Hen*_*k N 30
不是直接的答案,而是另一种可能达到你想要的方式:
您可以拥有一个生成一次的游乐场项目(例如mix new playground),然后您可以相对轻松地添加新的依赖项.
如果你iex -S mix在这个项目中,你会得到它的所有依赖项.
如果您想Poison在稍后的某个时间点快速进行实验,您可以回到这个项目中.
Tim*_*ith 18
您可以使用Mix.installElixir 1.12 中引入的 , 。它可以在任何目录中工作,不需要 Mix 项目。
iex(1)> Mix.install [:poison]
:ok
iex(2)> import Poison
Poison
Run Code Online (Sandbox Code Playgroud)
我可以推荐你这篇博文.
我想在没有Mix项目的情况下使用多个库,比如
从Github获取源代码,git checkout到最后一个版本并编译它们.
一个编译完成,创建〜/ .mix/beam /并将.beam文件移动到此目录中.
值得庆幸的是,iex只是一个shell脚本.如果您碰巧有一个指向〜/ .local/bin的自定义$ PATH变量,则将iex复制到此目录并将其重命名为deviex.然后在您的自定义deviex中,移动到最后一行并将其更改为...
exec elixir --no-halt --erl "-user Elixir.IEx.CLI" -pa "$HOME/.mix/beam" +iex "$@"
Run Code Online (Sandbox Code Playgroud)
现在它将在启动时加载位于〜/ .mix/beam的.beam文件.
我们为IEx使用不同脚本的原因是为了避免与您将使用常规iex处理的项目中的已安装库的名称冲突.
我不知道是否有正式的方法来做到这一点.
一种方法是在本地克隆库项目,编译它,然后通过创建~/.iex.exs脚本将其添加到库路径:
IO.puts "Adding poison to path from ~/.iex.exs"
true = Code.prepend_path("#{path_to_project}"/poison/_build/dev/lib/poison/ebin")
Run Code Online (Sandbox Code Playgroud)