This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-07-23
Channels
- # announcements (1)
- # aws (13)
- # babashka (31)
- # beginners (102)
- # calva (46)
- # cider (16)
- # clj-kondo (1)
- # cljs-dev (3)
- # clojars (1)
- # clojure (396)
- # clojure-argentina (1)
- # clojure-australia (4)
- # clojure-europe (64)
- # clojure-nl (2)
- # clojure-uk (8)
- # clojurescript (20)
- # conjure (5)
- # cursive (4)
- # datomic (15)
- # emacs (48)
- # graalvm (69)
- # graalvm-mobile (1)
- # jobs (4)
- # jobs-rus (1)
- # lsp (6)
- # malli (15)
- # meander (2)
- # observability (11)
- # off-topic (10)
- # pathom (2)
- # portal (4)
- # re-frame (19)
- # reitit (1)
- # remote-jobs (3)
- # sci (1)
- # shadow-cljs (51)
- # tools-deps (11)
- # vim (12)
- # xtdb (13)
Hi, I am trying to get Shadow-cljs running on a computer I haven't used for a while. I have updated npm dependencies using npm install
, even run npm install -g shadow-cljs
, after running shadow-cljs watch client
, I get the following error:
shadow-cljs - config: C:\Shared\orgpad\shadow-cljs.edn
shadow-cljs - running: lein run -m shadow.cljs.devtools.cli --npm watch client
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See for further details.
NPM dependency "react" has installed version "^16.14.0"
"16.13.0" was required by jar:file:/C:/Users/Pavel%20Klavik/.m2/repository/reagent/reagent/0.10.0/reagent-0.10.0.jar!/deps.cljs
NPM dependency "react-dom" has installed version "^16.14.0"
"16.13.0" was required by jar:file:/C:/Users/Pavel%20Klavik/.m2/repository/reagent/reagent/0.10.0/reagent-0.10.0.jar!/deps.cljs
shadow-cljs - HTTP server available at
shadow-cljs - HTTP server available at
shadow-cljs - server version: 2.14.6 running at
shadow-cljs - nREPL server started on port 9000
shadow-cljs - watching build :client
[:client] Configuring build.
[:client] Compiling ...
[:client] Build failure:
The required namespace "goog" is not available, it was required by "devtools/preload.cljs".
weird. I'm guessing version conflict. you are using lein so check that you get the correct clojurescript, closure-compiler, closure-library versions
This is in project.clj:
[thheller/shadow-cljs "2.14.6"]
[org.clojure/clojurescript "1.10.866"
:exclusions [com.google.javascript/closure-compiler-unshaded
org.clojure/google-closure-library
org.clojure/google-closure-library-third-party]]
shadow.user=> ( "goog/base.js")
#object[java.net.URL 0x5787e5d4 "jar:file:/C:/Users/Pavel%20Klavik/.m2/repository/org/clojure/google-closure-library/0.0-20201211-3e6c510d/google-closure-library-0.0-20201211-3e6c510d.jar!/goog/base.js"]
tried to update to the latest version and the problem remains:
shadow-cljs - HTTP server available at
shadow-cljs - HTTP server available at
shadow-cljs - server version: 2.15.2 running at
shadow-cljs - nREPL server started on port 9000
shadow-cljs - watching build :client
[:client] Configuring build.
[:client] Compiling ...
[:client] Build failure:
The required namespace "goog" is not available, it was required by "devtools/preload.cljs".
that file provides goog
and it appears to be there? maybe try wiping .shadow-cljs
although that self wipes on versions updates so unlikely to help
the content slurps just fine
try setting :log {:level :debug}
in shadow-cljs.edn
. maybe that logs something useful
never seen this problem before. can't really think of anything that could cause this.
just in case check (
and (
shadow.user=> ( "cljs/core.cljs")
#object[java.net.URL 0x391d2130 "jar:file:/C:/Users/Pavel%20Klavik/.m2/repository/org/clojure/clojurescript/1.10.879/clojurescript-1.10.879.jar!/cljs/core.cljs"]
shadow.user=> ( "com/google/javascript/jscomp/Compiler.class")
#object[java.net.URL 0x390c8c58 "jar:file:/C:/Users/Pavel%20Klavik/.m2/repository/com/google/javascript/closure-compiler-unshaded/v20210505/closure-compiler-unshaded-v20210505.jar!/com/google/javascript/jscomp/Compiler.class"]
C:\Shared\orgpad>shadow-cljs watch client
shadow-cljs - config: C:\Shared\orgpad\shadow-cljs.edn
shadow-cljs - socket connect failed, server process dead?
shadow-cljs - running: lein run -m shadow.cljs.devtools.cli --npm watch client
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See for further details.
NPM dependency "react" has installed version "^16.14.0"
"16.13.0" was required by jar:file:/C:/Users/Pavel%20Klavik/.m2/repository/reagent/reagent/0.10.0/reagent-0.10.0.jar!/deps.cljs
NPM dependency "react-dom" has installed version "^16.14.0"
"16.13.0" was required by jar:file:/C:/Users/Pavel%20Klavik/.m2/repository/reagent/reagent/0.10.0/reagent-0.10.0.jar!/deps.cljs
[2021-07-23 20:29:33.876 - FINE] :shadow.cljs.devtools.server/clj-check - {:cli-pid "4900"}
[2021-07-23 20:29:34.274 - FINE] :shadow.cljs.devtools.server.nrepl/config - {:port 9000}
[2021-07-23 20:29:34.597 - FINE] :shadow.remote.relay.local/client-hello - {:client-id 1, :client-info {:connection-info {}, :since #inst "2021-07-23T18:29:34.588-00:00", :type :runtime, :lang :clj, :desc "JVM Clojure Runtime"}}
shadow-cljs - HTTP server available at
[2021-07-23 20:29:34.617 - FINE] :shadow.cljs.devtools.server.dev-http/http-serve - {:handler-state {:mime-mappings #object[io.undertow.util.MimeMappings 0x2d7166ee "[email protected]"], :managers [#object[io.undertow.server.handlers.resource.ClassPathResourceManager 0xfcc8351 "io.undertow.server.handlers.resource.ClassPathResourceManager@fcc8351"] #object[io.undertow.server.handlers.resource.PathResourceManager 0x2c1e3665 "io.undertow.server.handlers.resource.PathResourceManager@2c1e3665"]], :handler #object[shadow.cljs.devtools.server.dev_http$eval58051$fn$reify__58063 0x12d50827 "shadow.cljs.devtools.server.dev_http$eval58051$fn$reify__58063@12d50827"]}, :config {:port 3500, :host "0.0.0.0", :ssl-context #object[javax.net.ssl.SSLContext 0x34b55a85 "[email protected]"]}, :https-port 3500}
shadow-cljs - HTTP server available at
[2021-07-23 20:29:34.625 - FINE] :shadow.cljs.devtools.server.dev-http/http-serve - {:handler-state {:mime-mappings #object[io.undertow.util.MimeMappings 0x3feab37d "[email protected]"], :managers [#object[io.undertow.server.handlers.resource.ClassPathResourceManager 0x41629597 "io.undertow.server.handlers.resource.ClassPathResourceManager@41629597"] #object[io.undertow.server.handlers.resource.PathResourceManager 0x44325f66 "io.undertow.server.handlers.resource.PathResourceManager@44325f66"]], :handler #object[shadow.cljs.devtools.server.dev_http$eval58051$fn$reify__58063 0x578d7574 "shadow.cljs.devtools.server.dev_http$eval58051$fn$reify__58063@578d7574"]}, :config {:port 3600, :host "0.0.0.0", :ssl-context #object[javax.net.ssl.SSLContext 0x34b55a85 "[email protected]"]}, :https-port 3600}
[2021-07-23 20:29:34.632 - FINE] :shadow.cljs.devtools.server/start
shadow-cljs - server version: 2.15.2 running at
shadow-cljs - nREPL server started on port 9000
shadow-cljs - watching build :client
[2021-07-23 20:29:34.636 - FINE] :shadow.cljs.devtools.server.worker/start - {:build-id :client, :proc-id "6f72937f-94bd-4bdb-9f19-008dc0ed22d2"}
[2021-07-23 20:29:34.643 - FINE] :shadow.remote.relay.local/client-hello - {:client-id 2, :client-info {:connection-info {}, :since #inst "2021-07-23T18:29:34.636-00:00", :type :build-worker, :desc "Worker for build :client", :shadow.cljs.model/worker-id "6f72937f-94bd-4bdb-9f19-008dc0ed22d2", :shadow.cljs.model/worker-for :client}}
[:client] Configuring build.
[:client] Compiling ...
[:client] Build failure:
The required namespace "goog" is not available, it was required by "devtools/preload.cljs".
try creating an empty project npx create-cljs-project dummy
cd dummy
npx shadow-cljs browser-repl
it seems to work:
shadow-cljs - config: C:\Shared\dummy\shadow-cljs.edn
shadow-cljs - updating dependencies
Retrieving org/clojure/core.async/1.3.618/core.async-1.3.618.jar from
Retrieving org/clojure/tools.reader/1.3.6/tools.reader-1.3.6.jar from
Retrieving commons-io/commons-io/2.10.0/commons-io-2.10.0.jar from
Retrieving expound/expound/0.8.9/expound-0.8.9.jar from
Retrieving ring/ring-codec/1.1.3/ring-codec-1.1.3.jar from
Retrieving crypto-random/crypto-random/1.2.1/crypto-random-1.2.1.jar from
Retrieving thheller/shadow-cljs/2.15.2/shadow-cljs-2.15.2-aot.jar from
Retrieving ring/ring-core/1.9.4/ring-core-1.9.4.jar from
shadow-cljs - dependencies updated
shadow-cljs - server version: 2.15.2 running at
shadow-cljs - nREPL server started on port 62056
[:browser-repl] Configuring build.
[:browser-repl] Compiling ...
[:browser-repl] Build completed. (119 files, 118 compiled, 0 warnings, 11.46s)
cljs.user=>
also fails:
[:browser-repl] Configuring build.
[:browser-repl] Compiling ...
[:browser-repl] Build failure:
The required namespace "goog" is not available, it was required by "devtools/preload.cljs".
[2021-07-23 20:37:08.192 - FINE] :shadow.remote.relay.local/client-hello - {:client-id 3, :client-info {:connection-info {}, :since #inst "2021-07-23T18:37:08.191-00:00", :type :repl-session, :build-id :browser-repl, :proc-id "de1528ef-bc61-4bb8-869d-c0e23ee42dff"}}
cljs.user=>
this is how shadow-cljs.edn looks:
{:lein true
:jvm-opts ["-Dfile.encoding=UTF8" "-Xmx2G"]
:nrepl {:port 9000}
:ssl {:keystore "keystore.jks"
:password "openpassword"}
:log {:level :debug}
:builds {:client {:target :browser
:output-dir "resources/public/js/compiled"
:asset-path "/js/compiled"
:module-loader true
:modules {:shared {:entries []}
:main {:init-fn orgpad.client.core/init
:depends-on #{:shared}}
:admin {:entries [orgpad.client.views.administration.core]
:depends-on #{:main}}
:layout {:entries [orgpad.client.layout.webworker.core]
:depends-on #{:shared}
:web-worker true}}
:compiler-options {:infer-externs :auto
:output-feature-set :es6}
:devtools {:after-load orgpad.client.core/mount-root
:before-load orgpad.client.core/stop-web-workers
:watch-dir "resources/public"
:browser-inject :main
:loader-mode :eval}}
:landing {:target :browser
:output-dir "landing/resources/js"
:asset-path "/js"
:modules {:main {:init-fn orgpad.landing.dev/init}}
:devtools {:http-root "landing/resources"
:http-port 3500
:after-load orgpad.landing.dev/mount-root
:watch-dir "landing/resources"
:browser-inject :main}}
:emails {:target :browser
:output-dir "emails/js"
:asset-path "/js"
:modules {:main {:init-fn orgpad.server.email.dev/init}}
:devtools {:http-root "emails"
:http-port 3600
:after-load orgpad.server.email.dev/mount-root
:watch-dir "emails"
:browser-inject :main}}
:screenshot {:target :node-script
:main orgpad.screenshot.core/main
:output-to "screenshot/screenshot.js"
:devtools {:autoload true}
:compiler-options {:optimizations :simple}}}}
this is project.clj:
(defproject orgpad "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.10.3"]
[org.clojure/tools.cli "1.0.206"]
[com.taoensso/sente "1.16.2"]
[com.taoensso/timbre "5.1.2"]
[bidi "2.1.6"]
; Use epoll on Linux for a lot more efficient polling of incomming packets
;
;
;
[io.netty/netty-transport-native-epoll "4.1.25.Final" :classifier "linux-x86_64"]
[aleph "0.4.6"]
[mount "0.1.16"]
[nrepl "0.8.3"]
[cprop "0.1.16"]
[cheshire "5.10.0"]
[clojure.java-time "0.3.2"]
[dnsjava/dnsjava "3.3.1"]
[org.postgresql/postgresql "42.2.12.jre7"]
[luminus-migrations "0.6.7"]
[conman "0.8.4"]
[expound "0.8.4"]
[yogthos/config "1.1.7"]
[selmer "1.12.22"]
[ring/ring-anti-forgery "1.3.0"]
[ring/ring-defaults "0.3.2"]
[ring/ring-devel "1.8.0"]
[ring/ring-codec "1.1.2"]
[ring/ring-json "0.5.0"]
[metosin/ring-http-response "0.9.1"]
[buddy/buddy-hashers "1.4.0"]
[co.deps/ring-etag-middleware "0.2.1"]
[bk/ring-gzip "0.3.0"]
[com.cognitect/transit-clj "1.0.324"]
[ring-basic-authentication "1.0.5"]
[ring-oauth2 "0.1.4"]
[clj-http "3.11.0"]
[hiccup "2.0.0-alpha2"]
[com.draines/postal "2.0.4"]
[cljc.java-time "0.1.8"]
[com.amazonaws/aws-java-sdk-s3 "1.11.1034"]
[byte-streams "0.2.5-alpha2"]
[camel-snake-kebab "0.4.1"]
[bouncer "1.0.1"]
[garden "1.3.10"]
[orgpad/volcano "0.1.2"]
[tea-time "1.0.1"]
[com.twelvemonkeys.imageio/imageio-jpeg "3.6.2"]
[com.twelvemonkeys.imageio/imageio-tiff "3.6.2"]
[com.twelvemonkeys.imageio/imageio-batik "3.6.2"]
[net.coobird/thumbnailator "0.4.13"]
[org.apache.xmlgraphics/batik-transcoder "1.14"]
[thheller/shadow-cljs "2.15.2"]
[org.clojure/clojurescript "1.10.879"
:exclusions [com.google.javascript/closure-compiler-unshaded
org.clojure/google-closure-library
org.clojure/google-closure-library-third-party]]
[reagent "0.10.0"]
[re-frame "0.12.0"]
[day8.re-frame/http-fx "v0.2.0"]
[hickory "0.7.1"]
[venantius/accountant "0.2.5"]
[pathetic "0.5.1"]
; Node.js dependencies, should duplicate dependencies from shadow-cljs.edn for Cursive.
[macchiato/core "0.2.17"]
[macchiato/env "0.0.6"]]
:plugins [[lein-garden "0.3.0"]
[lein-ns-dep-graph "0.2.0-SNAPSHOT"]]
:main orgpad.server.core
:min-lein-version "2.5.3"
:source-paths ["src"]
:clean-targets ^{:protect false} ["resources/public/js/compiled" "target"
"test/js"]
:resource-paths ["resources"]
:garden {:builds [{:id "orgpad"
:source-paths ["src"]
:stylesheet orgpad.css.core/orgpad
:compiler {:output-to "resources/public/css/orgpad.css"
:pretty-print? false}}
{:id "landing"
:source-paths ["src"]
:stylesheet orgpad.landing.css.core/landing
:compiler {:output-to "landing/resources/l/css/landing.css"
:pretty-print? false}}]}
:profiles
{:dev {:jvm-opts ["-Dconf=dev-config.edn" "-Xmx2G"]
:dependencies [[binaryage/devtools "0.9.10"]]
:plugins [[lein-doo "0.1.8"]]
:source-paths ["env/dev/clj"]
:resource-paths ["env/dev/resources" "landing/target"]}
:uberjar {:source-paths ["env/prod/clj"]
:omit-source true
:main orgpad.server.core
:aot [orgpad.server.core]
:uberjar-name "orgpad.jar"
:prep-tasks ["clean"
["garden" "once"]
["run" "-m" "shadow.cljs.devtools.cli" "release" "screenshot"]
["run" "-m" "orgpad.landing.build/build!"]
["run" "-m" "orgpad.server.email.build/build!"]
["run" "-m" "orgpad.build/release"]
"compile"]
:resource-paths ["env/prod/resources"]}})
comment out [binaryage/devtools "0.9.10"]
. don't know why it fails on goog
since everything depends on it
as always I strongly recommend keeping your CLJ and CLJS dependencies separate. either in shadow-cljs.edn or different lein profiles. your setup of everything always is pretty much the worst case for dependency issues
the error is now different:
[:client] Build failure:
The required namespace "goog" is not available, it was required by "shadow/cljs/devtools/client/console.cljs".
I can try to put dependencies back into shadow-cljs to see whether it will fix the problem
no, it is still the same error. it just fails on the first file it tries to compile, which is the :preloads
. that one is added by watch
, the other is added automatically when devtools are on the classpath
I don't really have a clue what could cause this. maybe check your lein
version? although I don't really know why that would affect anything
so after moving dependencies back to shadow-cljs, everything seems to work:
C:\Shared\orgpad>shadow-cljs watch client
shadow-cljs - config: C:\Shared\orgpad\shadow-cljs.edn
shadow-cljs - socket connect failed, server process dead?
shadow-cljs - updating dependencies
shadow-cljs - dependencies updated
NPM dependency "react" has installed version "^16.14.0"
"16.13.0" was required by jar:file:/C:/Users/Pavel%20Klavik/.m2/repository/reagent/reagent/0.10.0/reagent-0.10.0.jar!/deps.cljs
NPM dependency "react-dom" has installed version "^16.14.0"
"16.13.0" was required by jar:file:/C:/Users/Pavel%20Klavik/.m2/repository/reagent/reagent/0.10.0/reagent-0.10.0.jar!/deps.cljs
[2021-07-23 20:48:16.503 - WARNING] TCP Port 9630 in use.
shadow-cljs - HTTP server available at
shadow-cljs - HTTP server available at
shadow-cljs - server version: 2.15.2 running at
shadow-cljs - nREPL server started on port 9000
shadow-cljs - watching build :client
[:client] Configuring build.
[:client] Compiling ...
Browserslist: caniuse-lite is outdated. Please run next command `npm update`
[:client] Build completed. (1134 files, 1128 compiled, 0 warnings, 57.48s)
btw. I don't probably need to have this in my lein dev profile, since it is only used to run our server?
:dependencies [[binaryage/devtools "0.9.10"]]
the dev profile is used by default unless you are on the jar/uberjar tasks, so it does apply when running shadow-cljs as well
I don't know what [lein-ns-dep-graph "0.2.0-SNAPSHOT"]
is? maybe that does something weird?
that is just something which produces graphs between namespaces using graph-viz
Not really useful anymore since the project is huge. Maybe I will write output to OrgPad in the future instead.
Btw. concerning the problem where our server was locking js files so they cannot be recompiled Shadow-cljs. I have decided to not serve them by ring-resource middleware, but instead running Shadow-cljs HTTP server and redirecting requests starting with /js/
from our server to Shadow-cljs. It seems to fix the issue.
In the end, it seems cleaner to let Shadow-cljs handle everything concerning these files.
I never had an issue letting other servers serve my JS. although I never use ring-resource so that might be a factor 😛
How do you do this? Maybe it would simpler than our solution with redirecting to Shadow-cljs HTTP server.
Some older projects have nginx in front serving all static files. Others just use JVM Undertow (similar to shadow-undertow but older)
it seems to just use java.io.resource under the hood, so unclear what changed: we didn't do any changes in the code recently, or upgrading any dependencies
maybe something related to update in Windows since these problems occur randomly on different computers (on my laptop sometimes, on my desktop almost never, much more frequently on another two computers)