0.0-2913 - Google Closure Modules, improved nREPL support

Feb 21, 2015 by David Nolen on Google Groups

This release comes with two very big enhancements.

The first is support for Google Closure Modules via the :modules build option. Google Closure Modules permits splitting advanced compiled builds into optimal smaller pieces for faster page loads. ClojureScript's Google Closure Module support is fully :foreign-libs aware. Source mapping for modules is also fully supported.

The feature is described in more detail here: https://github.com/clojure/clojurescript/wiki/Compiler-Options#modules

The second big change is a fundamental rearchitecting of ClojureScript REPLs. ClojureScript REPLs now support a set of options similar to those taken by clojure.main/repl with small changes to account for different JavaScript evaluation environments. Many third party REPLs like Figwheel, Weasel, and Ambly are either unaffected or have already accounted for these changes. However current tooling leveraging Piggieback will likely present an inferior experience as Piggieback was designed to work around the previous limitations of ClojureScript REPLs. Now that ClojureScript REPLs are more like the standard Clojure REPL it should be far simpler to add proper interruptible-eval and load-file nREPL middleware so that existing tooling around nREPL can more easily integrate ClojureScript REPLs as first class citizens.

Feedback on both of these enhancements is very welcome!

There are also many smaller fixes around REPL command line behavior, the Nashorn REPL, :foreign-libs resource finding issues, the full list follows:


  • Support custom :output-to for :cljs-base module



  • CLJS-1042: Google Closure Modules :source-map support
  • CLJS-1041: Google Closure Modules :foreign-libs support
  • Google Closure Modules support via :modules
  • CLJS-1040: Source-mapped script stack frames for the Nashorn repl


  • CLJS-960: On carriage return REPLs should always show new REPL prompt
  • CLJS-941: Warn when a symbol is defined multiple times in a file
  • REPLs now support parameterization a la clojure.main/repl
  • all REPLs analyze cljs.core before entering loop
  • can emit :closure-source-map option for preserving JS->JS map
  • REPLs can now merge new REPL/compiler options via -setup


  • CLJS-998: Nashorn REPL does not support require special fn
  • CLJS-1052: Cannot require ns from within the ns at the REPL for reloading purposes
  • CLJS-975: preserve :reload & :reload-all in ns macro sugar
  • CLJS-1039: Under Emacs source directory watching triggers spurious recompilation
  • CLJS-1046: static vars do not respect user compile time metadata
  • CLJS-989: ClojureScript REPL loops on EOF signal
  • fix DCE regression for trivial programs
  • CLJS-1036: use getResources not findResources in get-upstream-deps*