Skip to content

Commit 6cdb060

Browse files
authored
Add JavaScript hot-reloading to frontend template (#17)
* Add JavaScript hot-reloading to frontend template - Add js_reloader.erl module to handle JavaScript rebuilds - Configure reloader to watch assets/js directory for .js file changes - Runs npm run build:js when JavaScript files are modified - Broadcasts js reload event via arizona_pubsub for live updates - Includes error handling for failed JS builds with output logging * Add js_reloader.erl to frontend template definition - Include js_reloader.erl in arizona.frontend.template file list - Ensures JS reloader module is created when generating new projects - Fixes missing template entry for JavaScript hot-reloading functionality * Add debounce timing to hot-reload watchers - Add 50ms debounce to CSS reloader to prevent excessive rebuilds - Add 20ms debounce to JS reloader for faster feedback on JavaScript changes - Optimizes performance by batching rapid file changes - Reduces unnecessary build cycles during development
1 parent 66a8512 commit 6cdb060

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

priv/templates/arizona.frontend.template

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
{template, "arizona.frontend/src/app.src", "{{name}}/src/{{name}}.app.src"}.
2727
{template, "arizona.frontend/src/app.erl", "{{name}}/src/{{name}}_app.erl"}.
2828
{template, "arizona.frontend/src/css_reloader.erl", "{{name}}/src/{{name}}_css_reloader.erl"}.
29+
{template, "arizona.frontend/src/js_reloader.erl", "{{name}}/src/{{name}}_js_reloader.erl"}.
2930
{template, "arizona.frontend/src/layout.erl", "{{name}}/src/{{name}}_layout.erl"}.
3031
{template, "arizona.frontend/src/view.erl", "{{name}}/src/{{name}}_view.erl"}.
3132
{template, "arizona.frontend/src/sup.erl", "{{name}}/src/{{name}}_sup.erl"}.

priv/templates/arizona.frontend/config/sys.config

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,16 @@
2020
handler => {{{name}}_css_reloader, #{}},
2121
watcher => #{
2222
directories => ["assets/css", "src"],
23-
patterns => [".*\\.css$", ".*\\.erl$"]
23+
patterns => [".*\\.css$", ".*\\.erl$"],
24+
debounce_ms => 50
25+
}
26+
},
27+
#{
28+
handler => {{{name}}_js_reloader, #{}},
29+
watcher => #{
30+
directories => ["assets/js"],
31+
patterns => [".*\\.js$"],
32+
debounce_ms => 20
2433
}
2534
}
2635
]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-module({{name}}_js_reloader).
2+
-behaviour(arizona_reloader).
3+
-export([reload/2]).
4+
5+
reload(_Files, _Opts) ->
6+
try
7+
CompileResult = os:cmd("npm run build:js", #{exception_on_failure => true}),
8+
ok = io:format("~ts", [CompileResult]),
9+
arizona_pubsub:broadcast(~"reload", js)
10+
catch
11+
error:{command_failed, ResultBeforeFailure, _ExitCode} ->
12+
io:format("JS build failed:~n~ts~n", [ResultBeforeFailure])
13+
end.

0 commit comments

Comments
 (0)