emezeske/lein-cljsbuild

Custom tagged literals cause build failure

Open

#482 opened on 2017年11月27日

GitHub で見る
 (1 comment) (0 reactions) (0 assignees)Clojure (153 forks)batch import
BugHelp WantedSuccessful Repro

Repository metrics

Stars
 (1,096 stars)
PR merge metrics
 (30d に merged PR はありません)

説明

In short, usage of custom tagged literals (aka "data readers") works as expected using cljs.build.api, but fails under cljsbuild.

A reproducing project is available here:

https://github.com/cemerick/failing-cljsbuild-data-readers

Using cljs.build.api:

$ lein run -m build
$ node target/out-min/min.js
we made a Bar: #cemerick.foo.Bar{:a 1, :b 2}

Using cljsbuild:

$ lein cljsbuild once min
Compiling ClojureScript...
Compiling ["target/out-min/min.js"] from ["src"]...
Compiling ["target/out-min/min.js"] failed.
clojure.lang.ExceptionInfo: failed compiling file:/mnt/g/dev/clojure/failing-data-readers/src/cemerick/foo.c
ljs {:file #object[java.io.File 0x239678d "/mnt/g/dev/clojure/failing-data-readers/src/cemerick/foo.cljs"]}
        at clojure.core$ex_info.invokeStatic(core.clj:4744)
        at clojure.core$ex_info.invoke(core.clj:4744)
        at cljs.compiler$compile_file$fn__4697.invoke(compiler.cljc:1552)
        at cljs.compiler$compile_file.invokeStatic(compiler.cljc:1513)
        at cljs.compiler$compile_file.invoke(compiler.cljc:1489)
        at cljs.closure$compile_file.invokeStatic(closure.clj:540)
        at cljs.closure$compile_file.invoke(closure.clj:531)
        at cljs.closure$eval6952$fn__6953.invoke(closure.clj:609)
        at cljs.closure$eval6888$fn__6889$G__6877__6896.invoke(closure.clj:493)
        at cljs.closure$compile_sources$iter__7076__7080$fn__7081.invoke(closure.clj:954)
Caused by: java.lang.IllegalStateException: Attempting to call unbound fn: #'cemerick.foo/read-bar
        at clojure.lang.Var$Unbound.throwArity(Var.java:45)
        at clojure.lang.AFn.invoke(AFn.java:32)
        at clojure.lang.Var.invoke(Var.java:381)
        at clojure.tools.reader$read_tagged.invokeStatic(reader.clj:854)
        at clojure.tools.reader$read_tagged.invoke(reader.clj:846)
        at clojure.tools.reader$read_dispatch.invokeStatic(reader.clj:71)
        at clojure.tools.reader$read_dispatch.invoke(reader.clj:66)
        at clojure.tools.reader$read_STAR_.invokeStatic(reader.clj:924)
        ... 78 more
Subprocess failed

I don't know how or why, but the Clojure file that contains the data reader var/fn is not loaded properly, though it is loaded at some point (which you can verify by adding a top-level println expr to cemerick/foo/bar.clj). As seen above, this issue is not present when cljsbuild isn't used.

コントリビューターガイド