blog.bouzuya.net

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 を見ても直せる気がしない。こんなに難しかったっけか。