David, thanks for making those improvements to Clojurescript, they'll make things a lot easier in the future.
In the realm of Boot we started working on CLJSJS as an effort to package up and ship popular Javascript libraries for use in Clojurescript [1]. While these packages have only been compatible with a Boot-based Clojurescript build chain we fully intend to make them work with this new approach to handle external Javascript libraries. That said a bunch of libraries are already in place, we tracked down extern files etc, so the changes to make them compatible should be rather small. Contributions are very welcome. I hope to get one of the libs compatible tomorrow so the migration path for the others is clear. A general question/concern I'd like to voice in that context is that this change makes it hard to split JS preamble from our compiled Clojurescript. Given that the Clojurescript code might change on a daily basis and the preamble mostly stays the same this forces users to re-download our (unchanged) JS dependencies over and over again, while caching them would have provided us with much better performance. [1] https://github.com/cljsjs On Saturday, January 24, 2015 at 4:10:29 PM UTC+1, David Nolen wrote: > ClojureScript, the Clojure compiler that emits JavaScript source code. > > README and source code: https://github.com/clojure/clojurescript > > New release version: 0.0-2719 > > Leiningen dependency information: > > [org.clojure/clojurescript "0.0-2719"] > > ClojureScript is not an island, like Clojure on the JVM, ClojureScript > embraces the many benefits provided by the host. However this goal > has been hampered by another goal - the compilation stragey. Google > Closure Compiler offers superior optimization and minification for > ClojureScript while simultaneously making it considerably more > difficult to integrate non-Closure compatible libraries. Using popular > libraries like jQuery, React or D3 is an error prone process: "which > extern did I forget?", "which script tag did I miss for development?", > "are these script tags in dependency order?". > > No more. 0.0-2719 delivers full support for non-Closure compatible > libraries through some less known features that have been lurking > around for almost three years - `deps.cljs` and the :foreign-libs > compiler option. > > `deps.cljs` is a simple EDN file provided at the root of a JAR that > describes additional build information for the ClojureScript > compiler. For example here is the `deps.cljs` for the React JAR I > maintain: > > { > :foreign-libs [{:file "react/react.js" > :file-min "react/react.min.js" > :provides ["com.facebook.React"]} > {:file "react/react_with_addons.js" > :file-min "react/react_with_addons.min.js" > :provides ["com.facebook.ReactWithAddons"]}] > :externs ["react/externs/react.js"] > } > > This file provides all the information ClojureScript needs to > correctly manage the foreign dependency for you under all compilation > modes and REPLs. > > In a REPL: > > cljs.user> (require 'com.facebook.React) > cljs.user> (. js/React > (renderToString > (. js/React (DOM.div nil "Hello!")))) > > In your project: > > (ns foo.bar > (:require com.facebook.React)) > > (enable-console-print!) > > (println > (. js/React > (renderToString > (. js/React (DOM.div nil "Hello!"))))) > > The above works under all compilation modes. There is no need to > include React as a script tag under development, there is no need to put > script tags in dependency order, there is no need to add React to > :preamble under :advanced, and there is no need to explicitly provide > :externs. > > All that is required is that JavaScript libraries be packaged in JARs > with a `deps.cljs`. > > Some of you might reasonably ask why not a tool like Bower for this > instead? Bower requires an additional dependency on Node.js. While > ClojureScript embraces Node.js as a useful target it is not a > requirement to be productive. Bower manages dependencies, but in the > Clojure world we have already embraced Maven for this task and have > done the same for ClojureScript. Finally Bower does not address the > problem of loading libraries at runtime. This is challenging to do - > some JavaScript libraries adopt CommonJS, some AMD, and the most > popular ones make no assumptions at all allowing users to simply use > script tags as they have done for nearly two decades. The above > solution addresses the issue for all ClojureScript users by > eliminating paralysis of choice. Finally none of the above > precludes Bower usage in any way whatsoever. > > This new feature addresses a long outstanding pain point with > ClojureScript development. All that is required is that we take the > time to properly package up the most popular JavaScript libraries that > fill gaps not currently served by exising ClojureScript and Google > Closure Library functionality. > > Please kick the tires and feedback is most welcome. This feature > touched many bits of code so there are likely to be wrinkles and we want > to get these ironed out as quickly as possible. > > ## 0.0-2719 > > ### Changes > * Full support for foreign dependencies > * CLJS-985: make ex-info not lose stack information > * CLJS-984: Update Node.js REPL support to use public API > * CLJS-963: do not bother computing goog/dep.js under :none > > ### Fixes > * CLJS-982: Var derefing should respect Clojure semantics > * CLJS-980: ClojureScript REPL stacktraces overrun prompt in many cases > * CLJS-979: ClojureScript REPL needs error handling for the special > functions > * CLJS-971: :reload should work for require-macros special fn > * CLJS-980: ClojureScript REPL stacktraces overrun prompt in many cases > * CLJS-979: ClojureScript REPL needs error handling for the special > functions > * CLJS-971: :reload should work for require-macros special fn > * CLJS-936: Multi arity bitwise operators > * CLJS-962: fix inconsistent hashing of empty collections > > -- 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/d/optout.