ANN: ClojureScript 1.7.170, Enhanced Build Pipeline

1,092 views
Skip to first unread message

David Nolen

unread,
Nov 6, 2015, 7:05:19 AM11/6/15
to clojure, clojur...@googlegroups.com
ClojureScript, the Clojure compiler that emits JavaScript source code.


Leiningen dependency information:

    [org.clojure/clojurescript "1.7.170"]

This release includes a major refactor of the build pipeline thanks to
Juho Teperi. This change along with some greatly simplified
recompilation logic will mean much faster cold build times for larger
projects (some users have already reported >10X).

This is a breaking change for existing tooling. You will need to
upgrade lein-cljsbuild, lein-figwheel, and boot-cljs if you intend to
adopt this version of ClojureScript. All the mentioned tools have
already accounted for this change. Refer to the appropriate
documentation for your tooling to determine which version number you
should adopt.

Other interesting changes and fixes include newer Google Closure
Compiler and Library dependencies, self hosting tweaks, a Google
Closure modules (:modules compiler option) regression,
improved warnings, and minor REPL enhancements.

As always feedback welcome!

### Enhancements
* Refactor build pipeline
* CLJS-1478: Self-host: Allow static-fns opt

### Changes
* Generate larger range of random UUIDs
* make browser REPL file reloads less chatty
* CLJS-1475: indicate that cljs.reader/read is safe
* CLJS-1470: Bump GCL Dependency
* bump Google Closure dep

### Fixes
* in system-time check that js/process.hrtime is actually a thing
* CLJS-1228: cljs.util/topo-sort is polynomial on larger dependency graphs
* check that performance.now method actually exists
* CLJS-1476: Self-host: Protocol prefixing broken for three- (or more) segment namespaces
* CLJS-1472 Patch for CLJS-1467 causes regression for nodejscli
* CLJS-1469 :modules regression
* CLJS-1445: Syntax error for var args in protocol methods
* Warn if protocol impl methods do not match its protocol
* CLJS-1451 Protocol impl do not support qualified method names
* CLJS-1422: cljs.js/eval-str fails for ns form on node.js with simple optimizations
* CLJS-1423: self-host: Requiring analyzer/compiler breaks unchecked Boolean
* CLJS-1466: Improperly munged output path for GClosure JavaScript
* CLJS-1467: Foreign Libraries not included when using :main with :simple or :advanced

Nathan B

unread,
Nov 6, 2015, 9:59:07 AM11/6/15
to ClojureScript, clo...@googlegroups.com
Just some early results on our builds show a roughly 30% decrease in compile time when using cljsbuild auto. That helps a lot during development.

Awesome work as usual, thanks!

Francis Avila

unread,
Nov 7, 2015, 3:59:10 AM11/7/15
to ClojureScript, clo...@googlegroups.com
I'm getting the following exception with figwheel builds (using 0.4.1):

java.lang.AbstractMethodError: Method clojurescript_build/core/CompilableSourcePaths._find_sources(Ljava/lang/Object;)Ljava/lang/Object; is abstract
at clojurescript_build.core.CompilableSourcePaths._find_sources (core.clj:-1)


(cljsbuild works fine with version 1.1.1)

Nolan said "All the mentioned tools [inc. figwheel] have already accounted for this change." I don't see any mention in the figwheel docs about cljs 1.7.170 compatibility or any commit message that mentions it. Can anyone confirm this is actually true for figwheel?

Maria Geller

unread,
Nov 7, 2015, 4:30:05 AM11/7/15
to Clojure, clojur...@googlegroups.com
Try using 0.5.0-SNAPSHOT for figwheel ;)

Francis Avila

unread,
Nov 7, 2015, 5:44:03 AM11/7/15
to ClojureScript, clo...@googlegroups.com
For future travelers.

If you use figwheel 0.5.0-SNAPSHOT you will get this exception:


clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: No such var: ana/forms-seq*, compiling:(figwheel_sidecar/utils.clj:49:21)

figwheel 0.5.0-SNAPSHOT has a dependency on cljs 1.7.145 even though it needs 1.7.170.

To resolve this error you must explicitly depend on clojurescript in your plugins. Example:

:plugins [[lein-figwheel "0.5.0-SNAPSHOT"]
[org.clojure/clojurescript "1.7.170"]] ;; Overrides broken lein-figwheel dependency.

lein deps :tree shows cljs 1.7.170 is used.

So,

Peter Lubell-Doughtie

unread,
Nov 7, 2015, 1:01:42 PM11/7/15
to clojur...@googlegroups.com, clo...@googlegroups.com

Have you tried the 0.5-SNAPSHOT?

--
Note that posts from new members are moderated - please be patient with your first post.
---
You received this message because you are subscribed to the Google Groups "ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojurescrip...@googlegroups.com.
To post to this group, send email to clojur...@googlegroups.com.
Visit this group at http://groups.google.com/group/clojurescript.

David Petrovics

unread,
Nov 9, 2015, 12:15:46 PM11/9/15
to ClojureScript, clo...@googlegroups.com
Hi Francis,

I tried figwheel 0.5.0-SNAPSHOT, got the (No such var: ana/forms-seq*) exception, then added [org.clojure/clojurescript "1.7.170"] to the plugins and am now seeing:

java.io.FileNotFoundException: Could not locate cljs/analyzer__init.class or cljs/analyzer.clj on classpath: , compiling:(figwheel_sidecar/utils.clj:1:1)

I'm on [lein-cljsbuild "1.1.1"], [org.clojure/clojurescript "1.7.170"], [org.clojure/clojure "1.7.0"], [org.omcljs/om "0.8.8"], [lein-figwheel "0.5.0-SNAPSHOT"]

Thanks!

David Nolen

unread,
Nov 9, 2015, 1:15:13 PM11/9/15
to clojur...@googlegroups.com
It appears one of your dependencies is pulling in an older version of Clojure.

David

Francis Avila

unread,
Nov 9, 2015, 1:24:08 PM11/9/15
to clojur...@googlegroups.com
Debug dependency problems with `lein deps :plugin-tree` and `:tree`. These show you what your actual dependencies are and why.

Sent from my iPhone
You received this message because you are subscribed to a topic in the Google Groups "ClojureScript" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojurescript/AiCARjGT2Mg/unsubscribe.
To unsubscribe from this group and all its topics, send an email to clojurescrip...@googlegroups.com.

Andreas Liljeqvist

unread,
Nov 10, 2015, 9:18:00 AM11/10/15
to clojur...@googlegroups.com
Works without problem with boot-cljs.
Roughly 20% decrease in compilation time.

Great work.

Daniel Compton

unread,
Nov 16, 2015, 4:14:46 PM11/16/15
to clojur...@googlegroups.com
Can someone explain why it's necessary to manually add a dependency on clojurescript in the :plugins vector?

:plugins [[lein-figwheel "0.5.0-SNAPSHOT"]
          [org.clojure/clojurescript "1.7.170"]] ;; Overrides broken lein-figwheel dependency.

Shouldn't the version of ClojureScript specified in :dependencies always be used?
Daniel

Francis Avila

unread,
Nov 16, 2015, 4:51:23 PM11/16/15
to ClojureScript
FYI since this was written lein-figwheel 0.5.0 (not snapshot) was released which fixes this dependency problem, so specifying cljs manually in :plugins is no longer necessary.

I imagine the figwheel snapshot was somehow either running the compiler in the wrong environment (i.e. the leinigen plugin process instead of the project process), or was rewriting the project process's dependencies incorrectly before running itself in the project context.

Roan O'Sullivan

unread,
Nov 16, 2015, 8:50:54 PM11/16/15
to ClojureScript
FWIW I encoountered same "Could not locate cljs/analyzer__init.class or cljs/analyzer.clj on classpath" issue when using lein version 2.5.1. Upgrading to lein 2.5.3 fixed the issue for me.

Nikita Prokopov

unread,
Nov 23, 2015, 5:12:54 AM11/23/15
to ClojureScript, clo...@googlegroups.com
Any advice what to do with deps.cljs?

Exception in thread "main" java.lang.AssertionError: No ns form found in /Users/prokopov/Dropbox/ws/cognician/c3/src/deps.cljs, compiling:(/private/var/folders/0h/9vv4g3d955l6ctwwl4k9xjy40000gn/T/form-init7898631568113094426.clj:1:125)

$ cat src/deps.cljs
{
:externs ["cognician/chat/externs.js"]
}
$

I’m using CLJS 1.7.170 and lein-cljsbuild 1.1.1

Nikita Prokopov

unread,
Dec 3, 2015, 6:07:10 PM12/3/15
to ClojureScript, clo...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages