I've debugged a bit, the underlying cause seems to be that goog.net.xpc.CrosspageChannel uses goog.async.Deferred, which lives in third_party.
In my project, I could indeed successfully compile again with the browser repl, by adding the third-party jar.
This leaves two open issues:
Why the NPE in cljsbuild?
script/cljsc complains about goog.async.Deferred never provided, as it should. When compiling with cljsbuild, however, the js-sources list contains an entry which :provides goog.async.Deferred but has an :uri of nil, which triggers the breakage when mapping javascript-name over it. I didn't find out where that entry comes from. This is probably a cljsbuild issue, so I'll amend the ticket if I have time to look into this within a few days.
So clojure.browser.repl transitively depends on third_party now
Not only that, there are a lot of files in closure lib proper that depend on goog.async.Deferred, as you can verify by running
grep -r "goog.require('goog.async.Deferred')" closure/library/closure
from cljs root dir. That begs two questions:
- Are there other third-party libs referred to from closure proper and has that been the case with older versions?
- Does it still make sense to split closure lib?