How to automatically recompile and reload my iex + mix application every time I modify the source code?
If there's no way for iex + mix combination to do that, what's the easiest alternative? I've checked phoenix's way to do reload, and it doesn't seems easy to implement for my small test project.
I also know about José's .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
And I'm not extremely happy since it's not reloading automatically on code change, I still need to type R.reload!
on iex.
And.. please help me create "iex" tag on stackoverflow, my reputation is not sufficient :)
I think this is what you are looking for: https://github.com/AgilionApps/remix
Currently iex
has an internal function to do this:
invoke IEx.Helpers.recompile inside iex
console.
Closest thing i know of is in Alchemist for emacs by @tonini. In Alchemist, there's an option to enable
(setq alchemist-hooks-test-on-save t)
which makes it compile and runs tests when you save.
For Erlang, I was using "relx -d" together with https://github.com/rustyio/sync The "-d" means that source files are linked using symlinks.
The same works nicely in Elixir. In mix.exs I added :sync in the following two places
defp deps do
[{:sync, git: "https://github.com/rustyio/sync.git", tag: "master"}, ....
def application do
[applications: [:logger, :sync],
Then, the following command compiles it into a release (before it works, you will have to install hex and exrm).
mix release -dev
Now, when you change a .ex file, and save, it will be recompiled and loaded directly.
19:33:46.474 [info] ... /apps/testapp1/lib/kv/bucket.ex:0: Recompiled.
You only want sync in your development environment!
来源:https://stackoverflow.com/questions/32540703/make-elixir-app-recompile-and-reload-on-source-code-change