NOTE: work in progress
ClojureScript starter tool
A tool to answer the following questions:
- What would a great first run of ClojureScript look like?
- How do we create that in the clearest and cheapest way possible?
- Should it do everything?
Install
This installs the cljs
command:
$ npm install -g cljs
* cljs is the abbreviation for ClojureScript
Basics
Using Lumo, fast experimenting is the default experience. Try the most basic things as fast as possible.
-
REPL
$ cljs cljs.user=> (+ 1 2 3) 6
-
Run script
;; my_file.cljs$ cljs my_file.cljs6
Use dependencies
You can pull in external libraries by specifying them in a plain config file, cljs.edn
.
Dependencies are automatically downloaded when running any cljs
command or explicitly
with cljs install
.
-
Dependencies
;; cljs.edn{:dependencies[[markdown-clj "0.9.94"]]}$.=>.=>"<h2>Hello World</h2>" -
In Script
;; my_file.cljs$ cljs my_file.cljsHello World
Use Namespaces
If you create a build name that points to a source directory, you can start organizing files into canonical namespaces.
-
Specify src directory
;; cljs.edn{:dependencies [...]:builds {:main {:src "src"}}} ;; <-- Source at "src" directory,;; or use ["src" ...] for multiple.;; (:main can be any name for the build) -
Use namespaces
;; src/example/core.cljs$.=>.=>.=>
Compile to JavaScript
To run your ClojureScript code without the cljs
command, you can
compile it to a JavaScript output file for use in a browser or elsewhere.
Specify extra config for compiler:
-
Compiler config
;; cljs.edn{:cljs-version "1.9.456" ;; <-- compiler version:dependencies [...]:builds {:main {:src "src":compiler {:output-to "main.js"}}}} ;; <-- compiler options -
Build or watch (using the production JVM compiler)
$ cljs build # using this build script $ cljs watch # using this watch script
-
Pretty errors (borrowed from Figwheel)
;; modify src/example/core.cljs;; <-- make an incomplete functionCompiling src/foo/core.cljs ---- Could not Analyze src/foo/core.cljs line:3 column:1 ---- Parameter declaration missing 1 (ns example.core) 2 3 (defn hello) ^--- Parameter declaration missing ---- Analysis Error : Please see src/foo/core.cljs ----
Develop for the web
Using Figwheel, you can compile your project with a much more fluid and interactive developer experience. You get a browser-connected REPL, hot-loading of files as they change, and an in-page status display.
-
Figwheel config
;; cljs.edn{:cljs-version "1.9.456":dependencies [...]:figwheel {...} ;; <-- optional server-level config:builds {:main {:src "src":figwheel ... ;; <-- optional build-level config:compiler {...}}}} -
Run Figwheel
$ cljs figwheel main
Try the example provided in this repo:
$ cljs figwheel examplecljs.user=>Open
public/index.html
, then modifysrc-example/example/core.cljs
to see status messages on your page:
Customize build scripts
For direct access to the ClojureScript compiler API,
run with a Clojure file (.clj
not .cljs
).
Your Clojure program will be given access to the compiler API and
your config in a *cljs-config*
var.
-
Custom Build
;; build.clj;; <-- official cljs compiler api -
Run
$ cljs build.clj