在ruby脚本中,我可以简单地做:
require 'some-gem'
SomeGem.do_something!
Run Code Online (Sandbox Code Playgroud)
如何在exs不创建全新混合项目的情况下在elixir 脚本中执行类似的操作?到目前为止,我已经搜索了谷歌如何做到这一点,并阅读了一些博客文章(如此),但无法找到一个正确的(阅读'简单')方式来做到这一点.
具体来说,我想HTTPoison在我的elixir脚本中使用.
在Elixir中没有像Ruby那样的全局包安装.虽然它可能在技术上是可行的依赖编译成.beam文件,并将它们添加到您的脚本的负载路径(比如你的文章链接到一样),如果你想要的行为有点类似于Ruby的,我会建议你使用mix run到运行加载了所有项目依赖项的任意脚本.
创建一个mix包含您想要指定的所有依赖项的全局项目,mix.exs在任何.exs文件中编写代码(不必在同一文件夹中),然后执行
cd /path/to/mix/project && mix run /path/to/.exs
Run Code Online (Sandbox Code Playgroud)
您甚至可以创建一个包装器shell脚本,通过调用自动执行上述操作my-elixir script.exs.
(我经常在StackOverflow上测试代码以获取答案时使用一些常见的依赖项,如HTTPoison和/或Poison.)
您可以使用Mix.installElixir 1.12 中引入的 , 。它可以在脚本中运行,不需要 Mix 项目。
# Install the dependencies you want directly in the script
Mix.install([:httpoison])
# Call modules from installed libraries
HTTPoison.get("https://stackoverflow.com/")
Run Code Online (Sandbox Code Playgroud)