在Elixir中,我如何全局安装软件包?

18

我可以使用mix全局安装一些软件包吗?我希望实现像npm的全局选项或gem的install功能,这对于我在任何地方都使用的软件包如csvyaml非常有用。


1
你可能想看一下这个:https://stackoverflow.com/questions/33358776/how-can-i-using-mixelixir-install-package-install-to-system/33374501#33374501 - Hécate
确实,这是我在Elixir中遇到的最大问题之一(可能是最大的)。 - bortzmeyer
4个回答

18

在Elixir中不存在这样的东西,你总是在项目的上下文中使用依赖项。像archives或escripts这样的解决方案旨在解决特定的问题,它们不允许在项目之间共享包。

但是,无需担心共享经常使用的软件包。软件包管理器Hex已经缓存了这些软件包,并且它将为您处理。


我明白了!谢谢valiml。 - Yingce

13

某些软件包将提供一个存档文件,您可以全局安装。

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 项目中可用的库。


实际文档链接在这里 - https://hexdocs.pm/mix/Mix.Tasks.Archive.Install.html - Vadim Shvetsov
1
是的,Phoenix框架就是这样一个存档文件,您可以使用以下命令安装最新版本:mix archive.install hex phx_new。要列出所有“全局”存档及其版本,请使用以下命令:mix archive - zenw0lf

1
对于Elixir脚本,您可以使用erun虚拟安装全局包。 通过编译带有依赖项的erun,您可以运行。
$ erun foo.exs

erun只是一个escript。)

https://github.com/s417-lama/erun


0

不是全局的,但如果你想在 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 安装的依赖项不是全局的,它们被缓存,并且每个脚本都指定了它所需的依赖项(以及版本)。


Elixir >= 1.12。 - bortzmeyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接