package dream-livereload

  1. Overview
  2. Docs
Live reloading for Dream applications

Install

Dune Dependency

Authors

Maintainers

Sources

dream-livereload-0.2.0.tbz
sha256=f9650347225b2e42b2e45419f4b98435c432c0a295b25fd7e1a7dc219024f8de
sha512=ab19e04bd6f941b769f75fc10114f3f1948cb55ed65e6f4ab8ddbf51987b18594cbb5ad4af24eeb3eb24f735e967d9e0a07112f5b7e53c2fc976cb3e5b5cdee7

Description

Live reloading for Dream applications

Published: 10 Apr 2022

README

Dream Live Reload

Live reloading for Dream applications.

Usage

Add the Dream_livereload middleware and route to your Dream application:

let () =
  Dream.run
  @@ Dream.logger
  @@ Dream_livereload.inject_script ()    (* <-- *)
  @@ Dream.router [
    Dream.get "/" (fun _ -> Dream.html "Hello World!");
    Dream_livereload.route ();            (* <-- *)
  ]
  @@ Dream.not_found

and dream-livereload to dune:

(executable
 (name my_app)
 (libraries dream dream-livereload))

This does two things:

  1. The middleware injects a script into the HTML documents sent by your application (HTTP responses with the Content-Type: text/html). The script opens a WebSocket connection to the server. When the connection is lost, the script tries to re-connect for 10 seconds, and upon a successfull re-connection, refreshes the current page.

  2. The route is the HTTP endpoint used for the WebSocket connection. It does nothing but hold open the WebSocket connection.

This allows automating part of your workflow: when you rebuild your project and start a new instance of your server, the client will automatically detect it and refresh the page.

To automate your workflow completely, you can use a script to automatically rebuild and restart your server on filesystem changes:

#!/usr/bin/env bash

source_dirs="lib bin"
args=${*:-"bin/server.exe"}
cmd="dune exec ${args}"

function sigint_handler() {
  kill "$(jobs -pr)"
  exit 1
}

trap sigint_handler SIGINT

while true; do
  dune build
  $cmd &
  fswatch -r -1 $source_dirs
  printf "\nRestarting server.exe due to filesystem change\n"
  kill "$(jobs -pr)"
done

This will watch the directories bin/ and lib/ and restart the server at bin/server.exe on any changes.

Dependencies (6)

  1. lwt_ppx
  2. markup >= "1.0.2"
  3. lambdasoup >= "0.6.1"
  4. dream >= "1.0.0~alpha3"
  5. ocaml >= "4.08.0"
  6. dune >= "2.7"

Dev Dependencies (1)

  1. odoc with-doc

Used by

None

Conflicts

None