Leiningen, ClojureScript and Browser REPL

Note to self, make sure ClojureScript is on classpath,

(defn cljs-home [path]
  (if-let [home (get (System/getenv) "CLOJURESCRIPT_HOME")]
    (str home path)
    (throw (Exception. "You must set the $CLOJURESCRIPT_HOME variable!"))))

(defproject foo "1.0.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [noir "1.2.2-SNAPSHOT"]]
  :extra-classpath-dirs ~(map cljs-home ["/lib/*" "/src/clj" "/src/cljs"]))

Compile and move browser repl,

(ns foo
  (:require [clojure.browser.repl :as repl]))

(repl/connect "http://localhost:9000/repl")
mkdir source/resources/public/
cljsc source/resources/foo.cljs > source/resources/public/foo.js
mv out/ source/resources/public/

Setup noir to serve browser repl,

(ns foo.core
  (:use [noir.core]
        [hiccup.core])
  (:require [noir.server :as server]
            [cljs.repl :as repl]
            [cljs.repl.browser :as browser]))

(defpage "/" []
  (html
   [:html
    [:head]
    [:body
     [:script {:type "text/javascript" :src "out/goog/base.js"}]
     [:script {:type "text/javascript" :src "foo.js"}]
     [:script {:type "text/javascript"} "goog.require('foo');"]]]))

;;"Type: " :cljs/quit " to quit"
(defn foo-repl []
  (repl/repl (browser/repl-env)))

(defn server []
  (server/start 8080))

Start server, repl and navigate to http://127.0.0.1:8080/, you should be good to go.

(server)
(foo-repl)