NAME

Mojolicious::Plugin::AssetPack::Manual::Reloader - Enable automatic reloading of assets

DESCRIPTION

It is possible to reload assets in the browser, when they are changed on disk.

This feature is EXPERIMENTAL, and should only be used while developing!

Example application

  use Mojolicious::Lite;

  # need to specify to AssetPack that we want to enable "reloader"
  plugin AssetPack => {reloader => {}};

  # define our own assets, define some routes and start the app
  app->asset("app.css" => "/css/app.css");
  get "/" => "index";
  app->start;

  __DATA__
  @@ css/app.css
  body { background: #eee; }
  @@ index.html.ep
  <!DOCTYPE html>
  <html>
    <head>
      <title>Reloader demo</title>
      %= asset "app.css"
      %# Reloader is only available in development mode
      %= asset "reloader.js" if app->mode eq "development"
    </head>
    <body>
      Reloader demo. Try to change css/app.css and see this page auto-update.
    </body>
  </html>

Running the application

To make this work, we need to start morbo and manually make it watch our files:

  $ morbo -w morbo examples/reloader.pl -w lib -w templates -w public/css

How does it work?

reloader.js contains a JavaScript which connects to a WebSocket in our server. Every time the WebSocket connection is broken the JavaScript will trigger a refresh.

There are two different refresh strategies available: "head" and "document".

  plugin AssetPack => {
    reloader => {strategy => "head"}
  };

Setting the strategy to "head" will only replace the head-tag in your document, while the default ("document") will refresh the whole document.

AUTHOR

Jan Henning Thorsen - jhthorsen@cpan.org