27

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

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

我也知道何塞的.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

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

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

4

4 回答 4

16

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

于 2016-02-02T21:07:37.050 回答
11

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

在控制台中调用IEx.Helpers.recompileiex

于 2017-04-10T18:50:44.147 回答
3

我所知道的最接近的事情是@tonini 为 emacs 编写的炼金术士。在 Alchemist 中,有一个选项可以启用

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

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

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

于 2015-09-29T17:56:46.210 回答
1

对于 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.

您只希望在您的开发环境中同步!

于 2016-03-15T18:41:15.610 回答