2016-05-19 ClojureScript の Tutorial をためした (2)
ClojureScript Tutorial の続き。進んでない。 step3 で次のような Error が表示される。
追記: よく見たら Wiki に step 3 から動かないと書いてあった
uncaught exception: Invalid match arg: /^#/
これは secretary の次の行が原因で起きる。
(defn- uri-without-prefix
[uri]
(string/replace uri (re-pattern (str "^" (prefix))) ""))
step3 で使われている ClojureScript 0.0-2843 が提供する clojure.string/replace は re-pattern で作られる js/RegExp を第二引数に取れない。ひどい。
https://github.com/clojure/clojurescript/blob/r2843/src/cljs/clojure/string.cljs#L27-L38
https://github.com/clojure/clojurescript/blob/c3899ac/src/main/cljs/clojure/string.cljs#L39-L55
最新の ClojureScript 1.8.51 にすると(当然)直るのだけど、今度は Clojure の version が古くて ClojureScript が動かなくなる。最新の Clojure 1.8.0 にすると、今度は一部の標準 library の挙動が変わるのか別の Error が出る……。面倒なので次のように project.clj のすべての deps の version を上げたら動いた……。ひどい。
:url "http://example.com/FIXME"
:license {:name "BSD (2-Clause)"
:url "http://opensource.org/licenses/BSD-2-Clause"}
- :dependencies [[org.clojure/clojure "1.6.0"]
+ :dependencies [[org.clojure/clojure "1.8.0"]
;; Backend dependencies
- [compojure "1.3.1"]
+ [compojure "1.5.0"]
;; Frontend dependencies
[secretary "1.2.1"]
- [org.clojure/clojurescript "0.0-2843"]
+ [org.clojure/clojurescript "1.8.51"]
- [ring/ring-core "1.3.2" :exclusions [javax.servlet/servlet-api]]
- [ring/ring-servlet "1.3.2" :exclusions [javax.servlet/servlet-api]]
- [ring/ring-defaults "0.1.2" :exclusions [javax.servlet/servlet-api]]
+ [ring/ring-core "1.4.0" :exclusions [javax.servlet/servlet-api]]
+ [ring/ring-servlet "1.4.0" :exclusions [javax.servlet/servlet-api]]
+ [ring/ring-defaults "0.2.0" :exclusions [javax.servlet/servlet-api]]
- [cc.qbits/jet "0.5.4"]]
+ [cc.qbits/jet "0.7.7"]]
:source-paths ["src/clj"]
:main cljsworkshop.core
- :plugins [[lein-cljsbuild "1.0.4"]]
+ :plugins [[lein-cljsbuild "1.1.3"]]
:cljsbuild {:builds
[{:id "app"
:source-paths ["src/cljs"]
Clojure / ClojureScript だけど debug が異常に難しい印象。stack trace を見ても直せる気がしない。こんなに難しかったっけか。