每次修改源代码时如何自动重新编译和重新加载我的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”标签,我的声誉还不够:)
答案 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)
使你在保存时编译并运行测试。
答案 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.
您只想在开发环境中进行同步!