cljsjs / boot-cljsjs

Helper tasks to aid the packaging of JS dependencies for Clojurescript projects
66 stars 22 forks source link

Compile error on latest boot-cljs 0.0-2629-9 #18

Closed pithyless closed 9 years ago

pithyless commented 9 years ago

Works:

[adzerk/boot-cljs      "0.0-2629-8" :scope "test"]
[cljsjs/boot-cljsjs    "0.4.1"      :scope "test"]

Broken:

[adzerk/boot-cljs      "0.0-2629-9" :scope "test"]
[cljsjs/boot-cljsjs    "0.4.1"      :scope "test"]

Is this an issue with boot-cljs or boot-cljsjs?

java.lang.IllegalArgumentException: No matching field found: getPath for class java.lang.String
                                         ...
adzerk.boot-cljs.middleware/shim/rooted-path                    middleware.clj:  154
                        clojure.core/mapv/fn                          core.clj: 6353
                   clojure.core.protocols/fn                     protocols.clj:  127
                 clojure.core.protocols/fn/G                     protocols.clj:   19
           clojure.core.protocols/seq-reduce                     protocols.clj:   31
                   clojure.core.protocols/fn                     protocols.clj:   48
                 clojure.core.protocols/fn/G                     protocols.clj:   13
                         clojure.core/reduce                          core.clj: 6289
                           clojure.core/mapv                          core.clj: 6353
            adzerk.boot-cljs.middleware/shim                    middleware.clj:  155
               adzerk.boot-cljs/prep-compile                     boot_cljs.clj:   52
        adzerk.boot-cljs/eval254/fn/fn/fn/fn                     boot_cljs.clj:  133
           adzerk.boot-cljs/eval254/fn/fn/fn                     boot_cljs.clj:  129
           adzerk.boot-cljs/eval230/fn/fn/fn                     boot_cljs.clj:   81
         cljsjs.boot-cljsjs/eval338/fn/fn/fn                   boot_cljsjs.clj:   30
         pandeiro.boot-http/eval555/fn/fn/fn                     boot_http.clj:   66
        boot.task.built-in/fn/fn/fn/fn/fn/fn                      built_in.clj:  165
           boot.task.built-in/fn/fn/fn/fn/fn                      built_in.clj:  165
              boot.task.built-in/fn/fn/fn/fn                      built_in.clj:  162
                         boot.core/run-tasks                          core.clj:  623
martinklepsch commented 9 years ago

Oh. That's bad and most likely my fault. Changed something in boot-cljs with https://github.com/adzerk/boot-cljs/pull/39. I think I know where the error is and will fix it.

martinklepsch commented 9 years ago

@pithyless Ok, I thought I new where the error is but I can't reproduce it here. Is there a chance you could put the project where this occurred on Github?

pithyless commented 9 years ago

@martinklepsch I narrowed it down to adding just [cljsjs/react "0.12.2-3"] to build.boot:

https://github.com/pithyless/boot-cljs-bug

martinklepsch commented 9 years ago

@pithyless thank you, that was very very helpful! I pushed a fix here: https://github.com/martinklepsch/boot-cljs.

If you clone that and run boot build-jar inside the cloned directory it will be installed to your local Maven repo and you should be able to run boot dev in the project you provided as a testcase.

martinklepsch commented 9 years ago

If you could report back here that the problem is gone, that would also be helpful. @nblumoe I think this will also fix the problem you're having.

martinklepsch commented 9 years ago

Oh, and @pithyless you should probably update your App Version of Boot to RC8, the binary that you you're using (RC4) is outdated (I'm surprised it works actually :))

pithyless commented 9 years ago
  1. This fixed the issue; thanks @martinklepsch for the quick response!
  2. I learned how to build a local version of a library I need to depend on. I was looking for this earlier and I couldn't figure it out; we need to push this into some FAQ in the wiki :)
  3. It's also non-obvious that boot -u did not update the binary. I had not realized until today when trying to document the issue.

Thanks again!

martinklepsch commented 9 years ago

I learned how to build a local version of a library I need to depend on. I was looking for this earlier and I couldn't figure it out; we need to push this into some FAQ in the wiki :)

Maybe that's something that could be added to the "Boot for Leiningen users" page: https://github.com/boot-clj/boot/wiki/Boot-for-Leiningen-Users

It's also non-obvious that boot -u did not update the binary. I had not realized until today when trying to document the issue.

Have you read this? https://github.com/boot-clj/boot/wiki/Keeping-Boot-Up-to-Date If you did, feel invited to edit it to make that differentiation more clear.

nblumoe commented 9 years ago

This almost resolves my issue, as it's working now. However, the path isn't correct though: hi__world_

TBH I don't understand yet WHY this is working, as react.inc.js is present only in target/js, not in the root folder. But still the web server serves it from localhost:3000/react.inc.js

nblumoe commented 9 years ago

Serving the build artifacts from a copy of /target (to prevent loosing it's contents when running boot) via boot serve -d <TARGET-COPY> wait does not work (404 for localhost:3000/react.inc.js). So, somehow boot build makes the file available from the web server's root. Is this related to filesets maybe?

martinklepsch commented 9 years ago

@nblumoe to be honest I'm not sure what's going on there. We're in the middle of migrating this kind of stuff to use :foreign-libs as it is provided in the latest version of Clojurescript so these features are likely to be removed from boot-cljs anyways.