Je veux essayer le module Poison json sans créer de projet de mixage.
Comment l'installer et le rendre disponible dans iex via l'importation?
J'ai pu l'ajouter à un projet, puis l'utiliser après être entré dans le répertoire du projet et avoir utilisé 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)>
Cependant, si je vais juste dans un iex normal dans un répertoire générique, je n'arrive pas à accéder à la bibliothèque 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
Aussi, comment installer une bibliothèque globalement à partir de github?
Je peux vous recommander ceci article de blog .
Il y a plus d'un couple de bibliothèques que je veux utiliser sans projet Mix, comme
Obtenez leurs sources depuis Github, git checkout jusqu'à la dernière version et compilez-les.
Une compilation était terminée, créez ~/.mix/beam/et déplacez les fichiers .beam dans ce répertoire.
Heureusement, iex n'est qu'un script Shell. S'il vous arrive d'avoir une variable $ PATH personnalisée qui pointe vers ~/.local/bin, copiez iex dans ce répertoire et renommez-la en quelque chose comme deviex. Ensuite, dans votre deviex personnalisé, passez à la dernière ligne et changez-le en…
exec elixir --no-halt --erl "-user Elixir.IEx.CLI" -pa "$HOME/.mix/beam" +iex "$@"
Et maintenant, il chargera les fichiers .beam situés dans ~/.mix/beam au démarrage.
La raison pour laquelle nous utilisons un script différent pour IEx est d'éviter les conflits de noms avec les bibliothèques installées dans les projets sur lesquels vous travaillerez avec iex standard.
Pas une réponse directe, mais une autre façon de réaliser peut-être ce que vous voulez:
Vous pouvez avoir un projet de terrain de jeu que vous générez une fois (par exemple mix new playground
) et auquel vous pouvez ensuite ajouter relativement facilement de nouvelles dépendances.
Si tu fais iex -S mix
dans ce projet, vous obtiendrez toutes ses dépendances.
Si vous voulez expérimenter rapidement avec par exemple Poison
à un moment ultérieur, vous pouvez simplement revenir dans ce projet.
Je ne sais pas s'il existe une manière officielle de procéder.
Une façon serait de cloner le projet de bibliothèque localement, de le compiler, puis de l'ajouter au chemin de la bibliothèque comme ceci en créant un ~/.iex.exs
script:
IO.puts "Adding poison to path from ~/.iex.exs"
true = Code.prepend_path("#{path_to_project}"/poison/_build/dev/lib/poison/ebin")