我可以使用mix全局安装一些软件包吗?我希望实现像npm
的全局选项或gem
的install功能,这对于我在任何地方都使用的软件包如csv
或yaml
非常有用。
我可以使用mix全局安装一些软件包吗?我希望实现像npm
的全局选项或gem
的install功能,这对于我在任何地方都使用的软件包如csv
或yaml
非常有用。
在Elixir中不存在这样的东西,你总是在项目的上下文中使用依赖项。像archives或escripts这样的解决方案旨在解决特定的问题,它们不允许在项目之间共享包。
但是,无需担心共享经常使用的软件包。软件包管理器Hex已经缓存了这些软件包,并且它将为您处理。
某些软件包将提供一个存档文件,您可以全局安装。
http://elixir-lang.org/docs/v1.1/mix/Mix.Tasks.Archive.Install.html
例如 Phoenix:
mix archive.install https://github.com/phoenixframework/phoenix/releases/download/v1.0.3/phoenix_new-1.0.3.ez
这样可以全局访问 mix phoenix.new
任务。但是,没有任何特定的方法允许安装在所有 mix 项目中可用的库。
mix archive.install hex phx_new
。要列出所有“全局”存档及其版本,请使用以下命令:mix archive
。 - zenw0lferun
虚拟安装全局包。
通过编译带有依赖项的erun
,您可以运行。$ erun foo.exs
erun
只是一个escript。)
不是全局的,但如果你想在 Mix 项目之外的脚本中使用依赖项,可以使用 Mix.install/2
:
例如,这个脚本:
Mix.install [:jason]
%{hello: "world!"}
|> Jason.encode!()
|> IO.puts()
第一次运行时产生:
$ elixir script.exs
Resolving Hex dependencies...
Dependency resolution completed:
New:
jason 1.3.0
* Getting jason (Hex package)
==> jason
Compiling 10 files (.ex)
Generated jason app
{"hello":"world!"}
后续运行:
$ elixir script.exs
{"hello":"world!"}
Mix.install/2
安装的依赖项不是全局的,它们被缓存,并且每个脚本都指定了它所需的依赖项(以及版本)。