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

时间:2015-09-12 15:47:34

标签: elixir mix iex

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

如果iex + mix组合无法做到这一点,那么最简单的选择是什么?我已经检查了凤凰的重载方式,对我的小测试项目来说似乎并不容易实现。

我也知道José的.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!

并且..请帮我在stackoverflow上创建“iex”标签,我的声誉还不够:)

4 个答案:

答案 0 :(得分:15)

我认为这就是你要找的东西: https://github.com/AgilionApps/remix

答案 1 :(得分:8)

目前iex有一个内部函数来执行此操作:

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

答案 2 :(得分:3)

我所知道的最近的事情是@cheini的Alchemist for emacs。 在Alchemist中,可以选择启用

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

使你在保存时编译并运行测试。

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

答案 3 :(得分:1)

对于Erlang,我正在使用" relx -d"和https://github.com/rustyio/sync" -d"表示源文件使用符号链接进行链接。

同样适用于Elixir。在mix.exs中,我添加了:在以下两个地方同步

  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.

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