Boot Figreload Save

Boot task providing live-reload using Fighweel client

Project README

boot-figreload

Clojars Project

Boot task to automatically reload resources in the browser when files in the project change. Featuring lein-figwheel.

  • Provides the reload task
  • Reload client can show warnings and exceptions from ClojureScript build on heads-up display.
    • Requires adzerk/boot-cljs >= 2.0.0

Usage

Add dependency to build.boot and require the task:

(set-env! :dependencies '[[adzerk/boot-cljs "LATEST" :scope "test"]
                          [powerlaces/boot-figreload "LATEST" :scope "test"]
                          [pandeiro/boot-http "0.7.6" :scope "test"]

                          [adzerk/boot-cljs-repl "0.3.3" :scope "test"]
                          [com.cemerick/piggieback "0.2.1"  :scope "test"]
                          [weasel "0.7.0"  :scope "test"]
                          [org.clojure/tools.nrepl "0.2.12" :scope "test"]])

(require '[adzerk.boot-cljs          :refer [cljs]]
         '[adzerk.boot-cljs-repl     :refer [cljs-repl]]
         '[powerlaces.boot-figreload :refer [reload]]
         '[pandeiro.boot-http        :refer [serve]])

Add the task to your development pipeline before (cljs ...):

(deftask dev []
  (comp (serve)
        (watch)
        (reload)
        (cljs-repl)
        (cljs :source-map true
              :optimizations :none)))

Dirac

Boot-figreload is compatible with Dirac, enabling REPL evaluation in-browser on top of Figwheel's reloading.

Your dev task could therefore become:

(set-env! :dependencies '[[adzerk/boot-cljs "LATEST" :scope "test"]
                          [powerlaces/boot-figreload "LATEST" :scope "test"]
                          [pandeiro/boot-http "0.7.6" :scope "test"]

                          ;; Dirac and cljs-devtoos
                          [binaryage/dirac "RELEASE" :scope "test"]
                          [binaryage/devtools "RELEASE" :scope "test"]
                          [powerlaces/boot-cljs-devtools "0.2.0" :scope "test"]

                          [adzerk/boot-cljs-repl "0.3.3" :scope "test"]
                          [com.cemerick/piggieback "0.2.1"  :scope "test"]
                          [weasel "0.7.0"  :scope "test"]

                          ;; Has to be `0.2.13`
                          [org.clojure/tools.nrepl "0.2.13" :scope "test"]])

(require '[adzerk.boot-cljs              :refer [cljs]]
         '[adzerk.boot-cljs-repl         :refer [cljs-repl]]
         '[powerlaces.boot-figreload     :refer [reload]]
         '[powerlaces.boot-cljs-devtools :refer [dirac cljs-devtools]]
         '[pandeiro.boot-http            :refer [serve]])

...

(deftask dev [D with-dirac bool "Enable Dirac Devtools."]
  (comp (serve)
        (watch)
        (cljs-devtools)
        (reload)
        (if-not with-dirac
          (cljs-repl)
          (dirac))
        (cljs :source-map true
              :optimizations :none
              :compiler-options {:external-config
                                 {:devtools/config {:features-to-install [:formatters :hints]
                                                    :fn-symbol "λ"
                                                    :print-config-overrides true}}})))

Node.js

It should work out of the box. Two things to be aware of:

  • you need to have a main.cljs.edn like:

    {:compiler-options {:target :nodejs}
     :init-fns [server.core/main]}
    
  • you need to launch your built artifact using node:

    $ cd target
    $ node main.js
    

Figwheel Integration Status

Ok this is a super alpha of the figwheel client in boot-reload.

At the moment the implemented server to client messages are:

  • :files-changed
  • :compile-warning
  • :compile-failed
  • :css-files-changed

Whereas the implemented client to server messages are:

  • "file-selected"
  • "callback"

Other tasks to complete:

  • Inject the Figwheel bootstrap script
  • Handle individual js-onload per build id (untested but there)
  • Figwheel version
  • Use Figwheel init code (?)
  • Handle boot-reload's :asset-host in Figwheel (link to comments)
  • Pass the right :open-file option to Figwheel
  • Solve the "first message lost" problem with a message queue (?)
  • Assert needed dependencies
  • Repl integration (at the moment supported via boot-cljs-repl)

To be thorougly tested:

  • Node client
  • Web-worker client
  • Trigger of multiple js-onloads

Additional Info

You can see the options available on the command line:

boot reload --help

or in the REPL:

boot.user=> (doc reload)

Examples

For an up-to-date demo project check figreload-demo.

Legacy examples of how to use reload in development can be useful as well. See Boot templates and example projects in the ClojureScript wiki.

License

Copyright © 2014 Adzerk
Copyright © 2015-2016 Juho Teperi
Copyright © 2017 Juho Teperi and Andrea Richiardi

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

Open Source Agenda is not affiliated with "Boot Figreload" Project. README Source: boot-clj/boot-figreload
Stars
48
Open Issues
5
Last Commit
6 years ago

Open Source Agenda Badge

Open Source Agenda Rating