使 elixir 应用程序重新编译并重新加载源代码更改

Make elixir app recompile and reload on source code change

如何在每次修改源代码时自动重新编译和重新加载我的 iex + mix 应用程序?

如果 iex + mix 组合没有办法做到这一点,最简单的选择是什么?查了phoenix的reload方法,我的小测试项目好像不太好实现。

我也知道何塞的 .iex.exs :

defmodule R do
  def reload! do
    Mix.Task.reenable "compile.elixir"
    Application.stop(Mix.Project.config[:app])
    Mix.Task.run "compile.elixir"
    Application.start(Mix.Project.config[:app], :permanent)
  end
end

而且我不是很高兴,因为它不会在代码更改时自动重新加载,我仍然需要在 iex 上键入 R.reload!

还有..请帮我在 Whosebug 上创建 "iex" 标签,我的声誉不够:)

我所知道的最接近的是@tonini 的 Alchemist for emacs。 在 Alchemist 中,有一个选项可以启用

(setq alchemist-hooks-test-on-save t)

这使得它在您保存时编译并运行测试。

https://github.com/tonini/alchemist.el#testing

我想这就是您要找的: https://github.com/AgilionApps/remix

对于 Erlang,我将 "relx -d" 与 https://github.com/rustyio/sync 一起使用。“-d”表示源文件使用符号链接进行链接。

在 Elixir 中同样有效。在 mix.exs 我在以下两个地方添加了 :sync

  defp deps do
        [{:sync, git: "https://github.com/rustyio/sync.git", tag: "master"}, ....


  def application do
    [applications: [:logger, :sync],

然后,下面的命令将它编译成一个版本(在它工作之前,你必须安装 hex 和 exrm)。

mix release -dev

现在,当你更改.ex文件并保存时,它会被重新编译并直接加载。

19:33:46.474 [info]  ... /apps/testapp1/lib/kv/bucket.ex:0: Recompiled.

您只想在您的开发环境中进行同步!

目前iex有一个内部函数可以做到这一点:

iex 控制台中调用 IEx.Helpers.recompile