[#10]: plugin cljs/figwheel; IDeref from cljs

This commit is contained in:
anatoly 2015-12-06 17:56:31 -05:00
parent da0922850a
commit 362036a3b9
5 changed files with 56 additions and 10 deletions

3
.gitignore vendored
View file

@ -4,7 +4,8 @@
pom.xml
pom.xml.asc
.repl*
dev-resources/
/dev-resources
/resources/public
figwheel_server.log
*.jar
*.class

View file

@ -6,13 +6,36 @@
:source-paths ["src"]
:dependencies [[org.clojure/clojure "1.7.0"]]
:dependencies [[org.clojure/clojure "1.7.0"]
[org.clojure/clojurescript "1.7.170"]]
:profiles {:dev {:source-paths ["dev" "test/app"]
:dependencies [[yesql "0.5.1"]
[ch.qos.logback/logback-classic "1.1.3"]
:dependencies [[ch.qos.logback/logback-classic "1.1.3"]
[org.clojure/tools.logging "0.3.1"]
[robert/hooke "1.3.0"]
[org.clojure/tools.namespace "0.2.11"]
[org.clojure/tools.nrepl "0.2.11"]
[com.datomic/datomic-free "0.9.5327" :exclusions [joda-time]]]}})
[com.datomic/datomic-free "0.9.5327" :exclusions [joda-time]]]
:plugins [[lein-cljsbuild "1.1.1"]
[lein-figwheel "0.5.0-2"]]
:cljsbuild {
:builds [{:id "dev"
:source-paths ["src" "test"]
:figwheel {:on-jsload "mount.example.cljs/on-js-reload" }
:compiler {:main mount.example.cljs
:asset-path "js/compiled/out"
:output-to "test/resources/public/js/compiled/mount.js"
:output-dir "test/resources/public/js/compiled/out"
:optimizations :none
:source-map true
:source-map-timestamp true
:cache-analysis true }}
{:id "prod"
:source-paths ["src" "test"]
:compiler {:output-to "test/resources/public/js/compiled/mount.js"
:main mount.example.cljs
:optimizations :advanced
:pretty-print false}}]}}})

View file

@ -1,6 +1,9 @@
(ns mount.core
(:require [mount.tools.macro :refer [on-error throw-runtime] :as macro])
#?(:cljs [mount.tools.cljs :as cljs]))
(ns #?(:clj mount.core
:cljs ^:figwheel-no-load mount.core)
#?(:clj (:require [mount.tools.macro :refer [on-error throw-runtime] :as macro])
:cljs (:require [mount.tools.macro :as macro]
[mount.tools.cljs :as cljs]))
#?(:cljs (:require-macros [mount.tools.macro :refer [on-error throw-runtime]])))
(defonce ^:private -args (atom :no-args)) ;; mostly for command line args and external files
(defonce ^:private state-seq (atom 0))
@ -114,8 +117,11 @@
(update-meta! [state :status] #{:started}))))
(deftype DerefableState [name]
clojure.lang.IDeref
(deref [this]
#?(:clj clojure.lang.IDeref
:cljs IDeref)
(#?(:clj deref
:cljs -deref)
[_]
(let [{:keys [status inst] :as state} (@meta-state name)]
(when-not (:started status)
(up name state (atom #{})))

View file

@ -0,0 +1,10 @@
(ns mount.example.cljs
(:require [mount.core :as mount])
(:require-macros [mount.core :refer [defstate]]))
(enable-console-print!)
(println "hi from mount!")
(defn on-js-reload []
"reloading js..")

View file

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html>
<body>
<script src="js/compiled/mount.js" type="text/javascript"></script>
</body>
</html>