【问题标题】:How do I load an elixir library in a simple elixir script?如何在简单的 elixir 脚本中加载 elixir 库?
【发布时间】:2019-06-04 21:30:46
【问题描述】:

在 ruby​​ 脚本中,我可以简单地这样做:

require 'some-gem'

SomeGem.do_something!

如何在不创建全新的 mix 项目的情况下在 elixir exs 脚本中做类似的事情? 到目前为止,我已经在谷歌上搜索了如何做到这一点,并阅读了一些博客文章( such as this),但无法找到合适的(读作“简单”)方法。

具体来说,我想在我的 elixir 脚本中使用HTTPoison。

【问题讨论】:

    标签: elixir


    【解决方案1】:

    Elixir 中没有像 Ruby 中那样的全局包安装。虽然在技术上可能将依赖项编译成 .beam 文件并将它们添加到脚本的加载路径中(就像您链接到的文章一样),但如果您想要类似于 Ruby 的行为,我建议您制作使用mix run 运行加载所有项目依赖项的任意脚本。

    创建一个全局mix 项目,其中包含您想要在mix.exs 中指定的所有依赖项,将您的代码写入任何.exs 文件(不必在同一个文件夹中),然后执行它

    cd /path/to/mix/project && mix run /path/to/.exs
    

    您甚至可以通过调用my-elixir script.exs 来创建一个包装shell 脚本来自动执行上述操作。

    (我经常这样做,同时在 StackOverflow 上测试代码以获取答案,这些代码使用一些常见的依赖项,如 HTTPoison 和/或 Poison。)

    【讨论】:

    • 你应该更新你的答案,Elixir 1.12 现在允许在脚本中使用Mix.install。
    【解决方案2】:

    如果没有混合,这可能有点复杂,但可行。

    我认为您必须在 exs 脚本的顶部显式添加编译 HTTPoison 的路径。

    Elixir 提供了一个 API Code.expand_path 来在 Erlang VM 代码路径列表的开头添加一个路径。您可以找到更多关于 API here 的描述。

    【讨论】:

      【解决方案3】:

      通过使用erun,您可以虚拟安装全局 Mix 包。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-15
        • 2017-09-11
        • 1970-01-01
        • 2014-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多