Oops, there's an open case to bring lein-cljsbuild's default compiler version up to r1586: https://github.com/emezeske/lein-cljsbuild/issues/186. I will try to get to that soon.
In the meantime, you should be able to add [org.clojure/clojurescript "0.0-1586"] to your :deps to get the latest version. On Thursday, March 14, 2013 2:25:49 PM UTC-7, David Nolen wrote: > > I'm not sure if lein-cljsbuild uses the latest release of ClojureScript - > Evan would know. In general I think it's probably best to just specify the > version of ClojureScript you want to use yourself to avoid any issues. > > > On Thu, Mar 14, 2013 at 5:21 PM, Rohan Nicholls > <rohan.n...@gmail.com<javascript:> > > wrote: > >> I have been in touch with the writer of the modern-cljs tutorial, and he >> thinks that >> a library include is missing that used to be a problem, but was fixed. >> It looks like >> the problem is back. >> >> You can follow the issue and discussion here: >> >> https://github.com/magomimmo/modern-cljs/issues/38 >> >> And a huge thank-you to mimmo for looking into this so quickly. >> >> >> On Wednesday, 13 March 2013 13:39:51 UTC+1, Rohan Nicholls wrote: >>> >>> Hey all, >>> >>> I have been experimenting with clojurescript and following the modern >>> tutorial. >>> >>> However I am now stuck while trying to get the browser repl (brepl) >>> working. >>> >>> I looked on the clojurescript jira tracker and there was no mention of >>> this problem. There was no way to add an issue, so I thought I would >>> post here as this is what is mentioned on the clojurescript page. >>> >>> This issue means no brepl, which pretty much brings any further >>> investigation of clojurescript to a halt. >>> >>> Thanks in advance for any help. >>> >>> Rohan >>> >>> The details: >>> >>> I was following this tutorial: >>> https://github.com/magomimmo/**modern-cljs/blob/master/doc/** >>> tutorial-02.md<https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-02.md> >>> >>> >>> I have a static web server running, I get a repl by executing: >>> >>> lein trampoline cljsbuild repl-listen >>> >>> And then I go to the simple.html page being served up by my server: >>> >>> http://localhost:8888/simple.**html <http://localhost:8888/simple.html> >>> >>> At this point according to the tutorial I should be good to go, and >>> the repl from the cljsbuild command given in the terminal earlier >>> should work. >>> >>> However, it hangs, and so I opened the console and saw these errors. >>> >>> Uncaught TypeError: Cannot call method 'call' of undefined on line >>> 989 of repl >>> >>> Which is actually caused by: >>> >>> Uncaught TypeError: Cannot read property 'client' of undefined on line >>> 1021 of repl >>> >>> The source comes from this url: >>> http://localhost:9000/repl?**xpc=%7B%22cn%22%3A%** >>> 22ScD89D6Sbo%22%2C%22tp%22%**3Anull%2C%22osh%22%3Anull%2C%** >>> 22ppu%22%3A%22http%3A%2F%**2Flocalhost%3A3000%2Frobots.** >>> txt%22%2C%22lpu%22%3A%22http%**3A%2F%2Flocalhost%3A9000%** >>> 2Frobots.txt%22%7D<http://localhost:9000/repl?xpc=%7B%22cn%22%3A%22ScD89D6Sbo%22%2C%22tp%22%3Anull%2C%22osh%22%3Anull%2C%22ppu%22%3A%22http%3A%2F%2Flocalhost%3A3000%2Frobots.txt%22%2C%22lpu%22%3A%22http%3A%2F%2Flocalhost%3A9000%2Frobots.txt%22%7D> >>> >>> >>> which after some grepping is coming from: >>> <project root>/repl/client.js >>> >>> And sure enough if I go to the offending line I see this: >>> >>> </script><script type="text/javascript"> >>> clojure.browser.repl.client.**start("http://localhost:9000")**; >>> >>> Uncaught TypeError: Cannot read property 'client' of undefined >>> </script></body></html> >>> >>> evaluating the clojure object indeed gives us clojure.browser.repl but >>> the repl object has no client. >>> >>> I started looking into this in more depth and found that indeed the >>> code that defines a client and the start function which is found one >>> line up: >>> >>> clojure.browser.repl.client={}**; >>> clojure.browser.repl.client.**start=function(a){ >>> return goog.events.listen(window,"**load",function(){ >>> return clojure.browser.repl.start_**evaluator.call(null,a) >>> }) >>> }; >>> >>> The ...repl.start_evaluator exists, and looks like this: >>> >>> clojure.browser.repl.start_**evaluator=function(a){ >>> var b=clojure.browser.net.xpc_**connection.call(null); >>> if(cljs.core.truth_(b)**){ >>> var c=clojure.browser.net.xhr_**connection.call(null); >>> clojure.**browser.event.listen.call(** >>> null,c,"\ufdd0'success",**function(a){ >>> return clojure.browser.net.transmit.** >>> call(null,b,"\ufdd0'evaluate-**javascript",a.currentTarget.** >>> getResponseText(cljs.core.**List.EMPTY)) >>> }); >>> clojure.**browser.net.register_service.** >>> call(null,b,"\ufdd0'send-**result",function(b){ >>> return clojure.browser.repl.send_** >>> result.call(null,c,a,clojure.**browser.repl.wrap_message.**call(null,"\ufdd0'result",b)) >>> >>> >>> }); >>> clojure.**browser.net.register_service.** >>> call(null,b,"\ufdd0'print",**function(b){ >>> return clojure.browser.repl.send_** >>> print.call(null,a,clojure.**browser.repl.wrap_message.**call(null,"\ufdd0'print",b)) >>> >>> >>> }); >>> clojure.**browser.net.connect.call(null,** >>> b,cljs.core.constantly.call(**null,null)); >>> return setTimeout(function(){ >>> return clojure.browser.repl.send_** >>> result.call(null,c,a,clojure.**browser.repl.wrap_message.** >>> call(null,"\ufdd0'ready","**ready")) >>> },50) >>> } >>> return alert("No 'xpc' param provided to child iframe.") >>> } >>> >>> >>> >>> There is no obvious place where this goes wrong within the >>> start_evaluator, as all the methods that are called, exist. So here >>> is the function (prettyfied) where the error occurs. >>> >>> Uncaught TypeError: Cannot call method 'call' of undefined on line >>> 989 of repl >>> >>> clojure.browser.net.connect=**function(){ >>> var a=null, >>> b=function(a){ >>> var b; >>> >>> b=a?a.clojure$**browser$net$IConnection$**connect$arity$1:a; >>> >>> if(b) >>> return a.clojure$browser$net$** >>> IConnection$connect$arity$1(a)**; >>> >>> b=clojure.**browser.net.connect[goog.**typeOf(null==a?null:a)]; >>> >>> if(!b&&(b=**clojure.browser.net.connect._,**!b)) >>> throw cljs.core.missing_protocol.** >>> call(null,"IConnection.**connect",a); >>> return b.call(null,a) >>> }, >>> c=function(a,b){ >>> var c; >>> >>> c=a?a.clojure$**browser$net$IConnection$**connect$arity$2:a; >>> >>> if(c) >>> return a.clojure$browser$net$** >>> IConnection$connect$arity$2(a,**b); >>> >>> c=clojure.**browser.net.connect[goog.**typeOf(null==a?null:a)]; >>> >>> if(!c&&(c=**clojure.browser.net.connect._,**!c)) >>> throw cljs.core.missing_protocol.** >>> call(null,"IConnection.**connect",a); >>> return c.call(null,a,b) >>> }, >>> d=function(a,b,c){ >>> var d; >>> >>> d=a?a.**clojure$browser$net$**IConnection$connect$arity$3:a; >>> >>> if(d) >>> ** return a.clojure$browser$net$** >>> IConnection$connect$arity$3(a,**b,c); >>> >>> d=**clojure.browser.net.connect[**goog.typeOf(null==a?null:a)]; >>> >>> if(!d&**&(d=clojure.browser.net.**connect._,!d)) >>> >>> ** throw cljs.core.missing_protocol.** >>> call(null,"IConnection.**connect",a); >>> return d.call(null,a,b,c) >>> }, >>> e=function(a,b,c,d){ >>> var e; >>> >>> e=a?a.**clojure$browser$net$**IConnection$connect$arity$4:a; >>> >>> if(e) >>> ** return a.clojure$browser$net$** >>> IConnection$connect$arity$4(a,**b,c,d); >>> >>> e=**clojure.browser.net.connect[**goog.typeOf(null==a?null:a)]; >>> >>> if(!e&**&(e=clojure.browser.net.**connect._,!e)) >>> >>> ** throw cljs.core.missing_protocol.** >>> call(null,"IConnection.**connect",a); >>> return e.call(null,a,b,c,d) >>> }, >>> a=function(a,g,h,i){ >>> **switch(arguments.length){ >>> ** case 1:return b.call(this,a); >>> ** case 2:return c.call(this,a,g); >>> ** case 3:return d.call(this,a,g,h); >>> ** case 4:return e.call(this,a,g,h,i) >>> } >>> throw Error("Invalid arity: "+arguments.length); >>> }; >>> a.cljs$lang$arity$1=b; >>> a.cljs$lang$arity$2=c; >>> a.cljs$lang$arity$3=d; >>> a.cljs$lang$arity$4=e; >>> return a}(); >>> >>> I have not managed to walk through this as the debugger considers the >>> xpc material new every time so breakpoints get discarded on each >>> refresh. >>> >>> >>> >>> My project.clj for the modern-cljs project: >>> >>> (defproject modern-cljs "0.1.0-SNAPSHOT" >>> :description "FIXME: write description" >>> :url "http://example.com/FIXME" >>> :license {:name "Eclipse Public License" >>> :url >>> "http://www.eclipse.org/legal/**epl-v10.html<http://www.eclipse.org/legal/epl-v10.html>"} >>> >>> >>> >>> ;; clj source code path >>> :source-paths ["src/clj"] >>> :dependencies [[org.clojure/clojure "1.5.1"] >>> [compojure "1.1.5"]] >>> >>> ;; lein-cljsbuild plugin to build a cljs project >>> :plugins [[lein-cljsbuild "0.3.0"] >>> [lein-ring "0.8.3"]] >>> >>> :ring {:handler modern-cljs.core/handler} >>> >>> ;; cljsbuild options configuration >>> :cljsbuild {:builds >>> [{;; cljs source code path >>> :source-paths ["src/cljs"] >>> >>> ;; google closure (CLS) options configuration >>> :compiler {;; CLS generated js script filename >>> :output-to "resources/public/js/modern.**js" >>> >>> ;; minimal js optimization directive >>> :whitespace, :simple, :advanced >>> :optimizations :whitespace >>> >>> ;; generated js code prettyfication >>> :pretty-print true}}]}) >>> >>> I tried running it with compojure to see if this solved the problem, >>> but no luck. >>> >>> Chrome version: Version 25.0.1364.155 >>> Firefox version: 19.0 >>> >>> In firefox the lines are the same, but the error messages different: >>> >>> [13:32:26.063] TypeError: cljs.core.merge is undefined @ >>> http://localhost:9000/repl?**xpc=%7B%22cn%22%3A%** >>> 22VwwA1h4vDD%22%2C%22tp%22%**3Anull%2C%22osh%22%3Anull%2C%** >>> 22ppu%22%3A%22http%3A%2F%**2Flocalhost%3A3000%2Frobots.** >>> txt%22%2C%22lpu%22%3A%22http%**3A%2F%2Flocalhost%3A9000%** >>> 2Frobots.txt%22%7D:989<http://localhost:9000/repl?xpc=%7B%22cn%22%3A%22VwwA1h4vDD%22%2C%22tp%22%3Anull%2C%22osh%22%3Anull%2C%22ppu%22%3A%22http%3A%2F%2Flocalhost%3A3000%2Frobots.txt%22%2C%22lpu%22%3A%22http%3A%2F%2Flocalhost%3A9000%2Frobots.txt%22%7D:989> >>> >>> >>> [13:32:26.064] TypeError: clojure.browser.repl is undefined @ >>> http://localhost:9000/repl?**xpc=%7B%22cn%22%3A%** >>> 22VwwA1h4vDD%22%2C%22tp%22%**3Anull%2C%22osh%22%3Anull%2C%** >>> 22ppu%22%3A%22http%3A%2F%**2Flocalhost%3A3000%2Frobots.** >>> txt%22%2C%22lpu%22%3A%22http%**3A%2F%2Flocalhost%3A9000%** >>> 2Frobots.txt%22%7D:1021<http://localhost:9000/repl?xpc=%7B%22cn%22%3A%22VwwA1h4vDD%22%2C%22tp%22%3Anull%2C%22osh%22%3Anull%2C%22ppu%22%3A%22http%3A%2F%2Flocalhost%3A3000%2Frobots.txt%22%2C%22lpu%22%3A%22http%3A%2F%2Flocalhost%3A9000%2Frobots.txt%22%7D:1021> >>> >>> >>> And that is where I am going to leave it, as someone will probably >>> take one look and know what is wrong, while I am flailing around in >>> the dark. >>> >> -- >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com<javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.