Yet another Elixir reloader.
ExSync deps on FileSystem
-
Create a new application:
mix new my_app
-
Add exsync to your
mix.exs
dependencies:
def deps do
[ {:exsync, "~> 0.2", only: :dev} ]
end
- (If runing Elixir < 1.4) Start your application the usual way, e.g.,
iex -S mix
, then:
ExSync.start()
- (Alternative) To always start ExSync when available, add the following to an application's
start/2
:
defmodule MyApp do
use Application
def start(_type, _args) do
import Supervisor.Spec, warn: false
case Code.ensure_loaded(ExSync) do
{:module, ExSync = mod} ->
mod.start()
{:error, :nofile} ->
:ok
end
# ... rest of your applications start script.
end
end
-
Create an umbrella project
mix new my_umbrella_app --umbrella
-
Add exsync to your
mix.exs
dependencies:
def deps do
[ {:exsync, "~> 0.2", only: :dev} ]
end
-
start your umbrella project with
exsync
taskiex -S mix exsync
- add your own dirs to monitor, if you want monitor
priv
dir, use such config:
config :exsync, :addition_dirs, ["/priv"]
- add your own extensions
config :exsync, :extensions, [".erl", ".hrl", ".ex", ".tpl"]
- Add an MFA callback so that your code can implement special handling when files are done reloading.
Example config:
config :exsync,
reload_timeout: 75,
reload_callback: {MyApp.MyModule, :handle_reload, [42]}
This will call your MyApp.MyModule
module after there have been no new reloads detected after 75ms. Specifically it will make a call like MyApp.MyModule.handle_reload(42)
(any items you put in the list will be added as arguments to Task.start/3
)