Recompiles mix project on any change to the project src files.
The initial version of this project is inspired by the - currently
unmaintained - remix
project by AgilionApps:
https://github.com/AgilionApps/remix
Install ex_rerun
by adding it as a dependency to mix.exs
.
def deps do
[{:ex_rerun, "~> 0.3", only: :dev}]
end
If developing a cmd line tool or similar project that does not involve a running
process/server, using mix run --no-halt
or iex -S mix
still works for
keeping the ex_rerun
process alive to monitor and recompile / retest your
code.
It is possible to configure ex_rerun
using the following parameters:
Note: the example below shows the default values.
config :ex_rerun,
scan_interval: 4000,
silent: false,
file_types: [".ex", ".exs", ".eex", ".json"],
paths: ["lib", "priv"],
ignore_pattern: nil,
tasks: [:elixir]
where:
scan_interval
specifies the number of ms to wait between rerun checks,silent
toggles whether to print the output of thetasks
registered, every timeex_rerun
runs,file_types
lists which file types that will trigger a rerun when changed,paths
lists which folders to monitor,ignore_pattern
specifies a regular expression matching files that should to be ignored even if they have a file type included infile_types
, andtasks
enumerates the mix tasks to run each time a code modification occurs, possible built-in values are::elixir
,:test
,:escript
, where:elixir
recompiles Elixir source code (same asMix.Tasks.Compile.Elixir
),:test
reruns any mix tests in the project (same asMix.Tasks.Test
), andescript
rebuilds a escript file (same asMix.Tasks.Escript.Build
).
Furthermore, tasks
can also include custom mix tasks. For example, the hex
package elm_compile defines the
Mix.Tasks.Compile.Elm
task which allows mix to also compile Elm files in a mix
project. An example project config using ex_rerun
and elm_compile
might look
like so:
config :ex_rerun,
file_types: [".elm", ".ex", ".exs", ".eex", ".json"],
paths: ["lib", "priv", "web"],
ignore_pattern: ~r{\.?#(.*)},
tasks: [:elixir, Mix.Tasks.Compile.Elm]
Another example of a custom mix task could be to generate API documentation for
a project based on a set of RAML
files.