Awesome
Saapas
<img src="saapas.png" align="right">Opinionated example project for ClojureScript using Boot instead of Leiningen. Was inspired by chestnut but has grown since to include other stuff to demonstrate Boot.
This is not an Leiningen template as I don't believe in setting up complex projects automatically. Instead you should study this project and copy only stuff you need and understand.
Prerequisites
You should first install Boot. Also you should be running the latest version.
Features
- Uses component and reloaded.repl to provide utilities to
start
,stop
andreset
(reload) the app. - Simple Compojure backend
- Simple Reagent frontend
- LESS to write CSS
- or alternatively, Sass to write CSS
- sass4clj is also able to import files from classpath
dev
task starts the whole development workflow- Check
boot dev --help
for options - Browser repl included
- Watches for file changes
- *.less changes trigger less compilation
- *.cljs changes trigger cljs compilation
- Live-reloading
- *.js, *.css, *.html changes send notification to browser thought WebSocket and browser loads the new files
- Check
autotest
task to run Clj and Cljs tests whenever files are changed- Uses boot-alt-test to run Clojure tests as fast as possible and only running the changed tests are file changes
- Uses boot-cljs-test to run ClojureScript tests with Doo, allowing the tests to run in many of JS environments, like browsers, Node or PhantomJS.
- Provides
package
task that creates Uberjar that can be used to run the app on a server- Cljs will be compiled using
:advanced
optimization and uses minified foreign libraries, like React - Only
backend.main
is AOT compiled, so that it is possible to start the application withjava -jar saapas.jar
but so that rest of the code is compiled at application startup to avoid problems with AOT compilation.
- Cljs will be compiled using
Usage
To start everything run:
$ boot dev
boot.user=>
# App should now be running, you can use following commands to restart the app
boot.user=> (stop) ; Stop app
boot.user=> (start) ; Start app
boot.user=> (reset) ; Stop, reload all namespaces, start
If you want a repl where you can execute commands, you can start a nrepl client which connects to the nrepl server started by the dev task by running
$ boot repl -c