ExSyncLib is a version of exsync that can be used as a library and is more configurable. If you want to reload code when it is updated and take granular actions then this might be a good fit.
ExSyncLib is partially finished, it might be workable but it is not documented and I don't currently have plans to support it or finish it.
TODO:
- Move mixfile parsing code from NervesLiveReload to ExSyncLib
- Correctly handle default src_extensions
- Pass in build_path and use
MIX_BUILD_PATHto not stomp on the user's compiled code- Or should it be
MIX_BUILD_ROOT? - This will involve modifying the beam_dirs to match
- Or should it be
- Run
mix compileonce before the beam watcher starts up- This will save the beam watcher from not being able to watch directories because they don't yet exist
Thoughts:
- Maybe this should be a behavior, that you have to pass an implementing module to in order to start the supervision tree
ExSyncLib deps on FileSystem
- Create a new application:
mix new my_app- Add exsync_lib to your
mix.exsdependencies:
def deps do
[
{:exsync_lib, "~> 0.2", only: :dev},
]
endOptionally add this snippet to your .iex.exs (in the root of your project) or your ~/.iex.exs:
if Code.ensure_loaded?(ExSyncLib) && function_exported?(ExSyncLib, :register_group_leader, 0) do
ExSyncLib.register_group_leader()
end
This will prevent the ExSyncLib logs from overwriting your IEx prompt.
Alternatively you can always just run ExSyncLib.register_group_leader() in your
IEx prompt.
- Create an umbrella project
mix new my_umbrella_app --umbrella- Add exsync_lib to your
mix.exsdependencies:
def deps do
[
{:exsync_lib, "~> 0.2", only: :dev},
]
end- start your umbrella project with
exsync_libtask
iex -S mix exsync_libAll configuration for this library is handled via the application environment.
:addition_dirs - Additional directories to monitor
For example, to monitor the priv directory, add this to your config.exs:
config :exsync_lib, addition_dirs: ["/priv"]:extensions - List of file extensions to watch for changes. Defaults to: [".erl", ".hrl", ".ex", ".eex"]
:extra_extensions - List of additional extensions to watch for changes (cannot be used with :extensions)
For example, to watch .js and .css files add this to your config.exs:
config :exsync_lib, extra_extensions: [".js", ".css"]:logging_enabled - Set to false to disable logging (default true)
:reload_callback - A callback MFA that is called when a set of files are done reloading. Can be used to implement your own special handling to react to file reloads.
:reload_timeout - Amount of time to wait in milliseconds before triggering the :reload_callback. Defaults to 150ms.
For example, to call MyApp.MyModule.handle_reload() add this to your config.exs:
config :exsync_lib,
reload_timeout: 75,
reload_callback: {MyApp.MyModule, :handle_reload, []}