After updating my ClojureScript project to support the gcp function runtime upgrade from Node.js 18 to 20, I have also updated cheerio to latest version ----- I'm encountering the following error. Any help would be appreciated! The required JS dependency "node:stream" is not available, it was required by "node_modules/parse5-parser-stream/dist/cjs/index.js".
Dependency Trace:
numbered_headings/ui/modules/global.cljs
numbered_headings/ui/modules/global_config.cljs
numbered_headings/ui/remote.cljs
node_modules/cheerio/dist/commonjs/index.js
node_modules/parse5-parser-stream/dist/cjs/index.js
this means that this library is trying to use the node built-in stream package. which isn't available when building for the browser
or which :target do you use? also which shadow-cljs version do you use?
:target :browser
"shadow-cljs": "2.16.12"
ok upgrade shadow-cljs and it should just work
2.28.22 is the latest
still getting the same issue - it exactly happened after upgrading firebase , firebase-admin and firebase-functions to latest version to upgrade node20 in gcp functions.
node_modules/cheerio/dist/commonjs/index.js this file should not be picked if you actually upgraded and restarted after
there is a node_modules/cheerio/dist/browser/index.js that should be used instead?
or is that being used and it still ends up with the node:stream dependency further down?
is that being used and it still ends up with the node:stream dependency further down
kinda don't believe that? that file has no node:stream require. so that would be weird?
or what is the entire new dependency trace?
[2025-03-27 16:10:42.900 - WARNING] TCP Port 9630 in use.
shadow-cljs - server version: 2.16.12 running at https://localhost:9630
shadow-cljs - nREPL server started on port 54779
shadow-cljs - watching build :functions
shadow-cljs - watching build :app
[:functions] Configuring build.
[:app] Configuring build.
[:app] Compiling ...
[:functions] Compiling ...
[:app] Build failure:
The required JS dependency "node:stream" is not available, it was required by "node_modules/parse5-parser-stream/dist/cjs/index.js".
Dependency Trace:
numbered_headings/ui/modules/global.cljs
numbered_headings/ui/modules/global_config.cljs
numbered_headings/ui/remote.cljs
node_modules/cheerio/dist/commonjs/index.js
node_modules/parse5-parser-stream/dist/cjs/index.js
Searched for npm packages in:
/Users/priyanka.gupta/sde/development/numbered-headings-cloud/node_modules
node_modules/cheerio/dist/commonjs/index.js
shadow-cljs - server version: 2.16.12
so you didn't upgrade
btw for multi line code
like
this
use three backticksas per suggestion after upgrating the shawdow-cljs to 2.28.22 the issue "node:stream" is not available resolved -- but i am getting below issue now - shadow-cljs - config: /Users/priyanka.gupta/sde/development/numbered-headings-cloud/shadow-cljs.edn
shadow-cljs - starting via "clojure"
[2025-03-27 22:57:38.174 - WARNING] TCP Port 9630 in use.
shadow-cljs - server version: *2.28.22* running at
shadow-cljs - nREPL server started on port 65325
shadow-cljs - watching build :functions
shadow-cljs - watching build :app
[:functions] Configuring build.
[:app] Configuring build.
[:app] Compiling ...
[:functions] Compiling ...
WARNING: abs already refers to: #'clojure.core/abs in namespace: taoensso.encore, being replaced by: #'taoensso.encore/abs
[:app] Build failure:
package firebase-functions had exports, but could not resolve ./lib/logger
{:package #object[java.io.File 0x3da41d65 "/Users/priyanka.gupta/sde/development/numbered-headings-cloud/node_modules/firebase-functions"], :require-from nil, :rel-require "./lib/logger"}
ExceptionInfo: package firebase-functions had exports, but could not resolve ./lib/logger
shadow.build.npm/find-resource-in-package (npm.clj:835)
shadow.build.npm/find-resource-in-package (npm.clj:813)
shadow.build.npm/find-resource (npm.clj:987)
shadow.build.npm/find-resource (npm.clj:879)
shadow.build.resolve/find-npm-resource (resolve.clj:123)
shadow.build.resolve/find-npm-resource (resolve.clj:94)
shadow.build.resolve/eval13071/fn--13074 (resolve.clj:266)
clojure.lang.MultiFn.invoke (MultiFn.java:244)
shadow.build.resolve/find-resource-for-string (resolve.clj:81)
shadow.build.resolve/find-resource-for-string (resolve.clj:70)
shadow.build.resolve/resolve-string-require (resolve.clj:466)
shadow.build.resolve/resolve-string-require (resolve.clj:449)
shadow.build.resolve/resolve-require (resolve.clj:702)
shadow.build.resolve/resolve-require (resolve.clj:695)
shadow.build.resolve/resolve-deps/fn--13020 (resolve.clj:52)
clojure.lang.PersistentVector.reduce (PersistentVector.java:343)
clojure.core/reduce (core.clj:6886)
clojure.core/reduce (core.clj:6869)
shadow.cljs.util/reduce-> (util.clj:42)
shadow.cljs.util/reduce-> (util.clj:41)
shadow.build.resolve/resolve-deps (resolve.clj:50)
shadow.build.resolve/resolve-deps (resolve.clj:34)
shadow.build.resolve/resolve-symbol-require (resolve.clj:689)
shadow.build.resolve/resolve-symbol-require (resolve.clj:649)
shadow.build.resolve/resolve-require (resolve.clj:699)
shadow.build.resolve/resolve-require (resolve.clj:695)
shadow.build.resolve/resolve-deps/fn--13020 (resolve.clj:52)
clojure.lang.PersistentVector.reduce (PersistentVector.java:343)
clojure.core/reduce (core.clj:6886)
clojure.core/reduce (core.clj:6869)
shadow.cljs.util/reduce-> (util.clj:42)
shadow.cljs.util/reduce-> (util.clj:41)
shadow.build.resolve/resolve-deps (resolve.clj:50)
shadow.build.resolve/resolve-deps (resolve.clj:34)
shadow.build.resolve/resolve-symbol-require (resolve.clj:689)
shadow.build.resolve/resolve-symbol-require (resolve.clj:649)
shadow.build.resolve/resolve-require (resolve.clj:699)
shadow.build.resolve/resolve-require (resolve.clj:695)
shadow.build.resolve/resolve-deps/fn--13020 (resolve.clj:52)
clojure.lang.PersistentVector.reduce (PersistentVector.java:343)
clojure.core/reduce (core.clj:6886)
clojure.core/reduce (core.clj:6869)
shadow.cljs.util/reduce-> (util.clj:42)
shadow.cljs.util/reduce-> (util.clj:41)
shadow.build.resolve/resolve-deps (resolve.clj:50)
shadow.build.resolve/resolve-deps (resolve.clj:34)
shadow.build.resolve/resolve-symbol-require (resolve.clj:689)
shadow.build.resolve/resolve-symbol-require (resolve.clj:649)
shadow.build.resolve/resolve-require (resolve.clj:699)
shadow.build.resolve/resolve-require (resolve.clj:695)
shadow.build.resolve/resolve-entry (resolve.clj:709)
shadow.build.resolve/resolve-entry (resolve.clj:708)
clojure.lang.PersistentVector.reduce (PersistentVector.java:343)
clojure.core/reduce (core.clj:6886)
clojure.core/reduce (core.clj:6869)
shadow.cljs.util/reduce-> (util.clj:42)
shadow.cljs.util/reduce-> (util.clj:41)
shadow.build.resolve/resolve-entries (resolve.clj:723)
shadow.build.resolve/resolve-entries (resolve.clj:714)
shadow.build.modules/resolve-module/fn--15935 (modules.clj:252)
shadow.build.modules/resolve-module (modules.clj:248)
shadow.build.modules/resolve-module (modules.clj:238)
clojure.lang.PersistentVector.reduce (PersistentVector.java:343)
clojure.core/reduce (core.clj:6886)
clojure.core/reduce (core.clj:6869)
shadow.build.modules/resolve-modules (modules.clj:258)
shadow.build.modules/resolve-modules (modules.clj:257)
shadow.build.modules/analyze (modules.clj:312)
shadow.build.modules/analyze (modules.clj:303)
shadow.build/resolve (build.clj:459)
shadow.build/resolve (build.clj:453)
shadow.build/compile (build.clj:509)
shadow.build/compile (build.clj:493)
shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:368)
shadow.cljs.devtools.server.worker.impl/build-compile (impl.clj:349)
shadow.cljs.devtools.server.worker.impl/eval17760/fn--17762 (impl.clj:448)
clojure.lang.MultiFn.invoke (MultiFn.java:234)
shadow.cljs.devtools.server.util/server-thread/fn--17513/fn--17514/fn--17522 (util.clj:283)
shadow.cljs.devtools.server.util/server-thread/fn--17513/fn--17514 (util.clj:282)
shadow.cljs.devtools.server.util/server-thread/fn--17513 (util.clj:255)
WARNING: update-keys already refers to: #'clojure.core/update-keys in namespace: io.aviso.exception, being replaced by: #'io.aviso.exception/update-keys
[:functions] Build completed. (268 files, 3 compiled, 1 warnings, 16.94s)
`------ WARNING #1 - :redef -----------------------------------------------------`
Resource: taoensso/encore.cljs:964:1
--------------------------------------------------------------------------------
961 | )
962 |
963 | (defn pow [n exp] (Math/pow n exp))
`964 | (defn abs [n] (if (neg? n) (- n) n)) ; #+clj (Math/abs n) reflects`
-------^------------------------------------------------------------------------
`abs already refers to: cljs.core/abs being replaced by: taoensso.encore/abs`
--------------------------------------------------------------------------------
965 | (defn round* ; round
966 | ([ n] (round* :round nil n))
967 | ([type n] (round* type nil n))
968 | ([type nplaces n]
--------------------------------------------------------------------------------
^Cmake: *** [watch] Interrupt: 2
looks like you have a (:require ["firebase-functions/lib/logger" ...]) in your code somewhere? but the library doesn't want you to do that
possibly because you upgraded that dependency?
(:require ["firebase-functions/logger" ...]) is what you are supposed to be doing when looking at the package.json of that package
fixed the above issue by replacing the proper import -- now getting new issue while building the app - shadow-cljs - starting via "clojure"
[2025-03-27 23:42:33.672 - WARNING] TCP Port 9630 in use.
shadow-cljs - server version: 2.28.22 running at
shadow-cljs - nREPL server started on port 50790
shadow-cljs - watching build :functions
shadow-cljs - watching build :app
[:functions] Configuring build.
[:app] Configuring build.
[:app] Compiling ...
[:functions] Compiling ...
[:app] Build failure:
The required JS dependency "async_hooks" is not available, it was required by "node_modules/firebase-functions/lib/common/trace.js".
Dependency Trace:
numbered_headings/ui/modules/page_hidden.cljs
numbered_headings/update.cljs
numbered_headings/server/log.cljs
node_modules/firebase-functions/lib/logger/index.js
node_modules/firebase-functions/lib/common/trace.js
Searched for npm packages in:
/Users/priyanka.gupta/sde/development/numbered-headings-cloud/node_modules
See:
that is also a node only dependency not available in the browser
are you actually running in the browser? seems like you use a lot of packages intended for node?
yes its on browser and also some part in BE - below is the shadow-cljs.edn -`{:deps true`
:http {:host "localhost"
:ssl-port 9630}
:ssl {:keystore "ssl/keystore.jks"
:password "changeit"}
:builds {:functions {:target :node-library
:output-to "functions/index.js"
:exports-var numbered-headings.server/cloud-functions
:closure-defines {numbered-headings.server.amplitude-helper/AMPLITUDE_KEY #shadow/env "AMPLITUDE_KEY"
numbered-headings.server.handlers/LOGROCKET_KEY #shadow/env "LOGROCKET_KEY"
numbered-headings.server.handlers/CSP_UNSAFE_EVAL #shadow/env "CSP_UNSAFE_EVAL"
numbered-headings.server.launchdarkly-helper/LAUNCH_DARKLY_KEY #shadow/env "LAUNCH_DARKLY_KEY"}}
:app {:target :browser
:js-options
{:resolve {"jquery" {:target :global
:global "jQuery"} "jQuery" {:target :global
:global "jQuery"}}}
:compiler-options {:output-feature-set :es8}
:output-dir "public/js"
:asset-path "/js"
:module-hash-names true
:build-options {:manifest-name "../../functions/manifest.edn"}
:devtools {:before-load numbered-headings.ui.current-app/stop
:after-load numbered-headings.ui.current-app/start
:devtools-url "
:modules {:shared {:entries []
:init-fn numbered-headings.ui.amplitude-client/initialize}
:main {:entries [numbered-headings.ui.modules.page]
:init-fn numbered-headings.ui.modules.page/init
:depends-on #{:shared}}
:hidden {:entries [numbered-headings.ui.modules.page-hidden]
:init-fn numbered-headings.ui.modules.page-hidden/init
:depends-on #{:shared}}
:legacy {:entries [numbered-headings.ui.modules.legacy]
:init-fn numbered-headings.ui.modules.legacy/init
:depends-on #{:shared}}
:macro {:entries [numbered-headings.ui.modules.macro]
:init-fn numbered-headings.ui.modules.macro/init
:depends-on #{:shared}}
:new-getting-started {:entries [numbered-headings.ui.pages.new-getting-started]
:init-fn numbered-headings.ui.pages.new-getting-started/init
:depends-on #{:shared}}
:space-config {:entries [numbered-headings.ui.modules.space]
:init-fn numbered-headings.ui.modules.space/init
:depends-on #{:shared}}
:global-config {:entries [numbered-headings.ui.modules.global]
:init-fn numbered-headings.ui.modules.global/init
:depends-on #{:shared}}
:configure {:entries [numbered-headings.ui.pages.configure]
:init-fn numbered-headings.ui.pages.configure/init
:depends-on #{:shared}}}
:closure-defines {numbered-headings.ui.amplitude-client/AMPLITUDE_KEY #shadow/env "AMPLITUDE_KEY"
numbered-headings.ui.amplitude-client/FINGER_PRINT_KEY #shadow/env "FINGER_PRINT_KEY"}}
:test
{:target :node-test
:output-to "target/node-tests.js"
:ns-regexp "-test$"
:autorun true}
:cards {:target nubank.workspaces.shadow-cljs.target
:ns-regexp "^numbered-headings\\.client.*-(test|cards)$"
:output-dir "public/js/workspaces"
:asset-path "/js/workspaces"
:preloads [com.fulcrologic.fulcro.inspect.preload]}}}
ok, so I'm guessing this node part isn't actually supposed to be in the browser then? only in the :functions build?
yes true
numbered_headings/server/log.cljs this too sounds like its meant for the server, but is somewhere included by the :app build
Yes - This ClojureScript file is responsible for structured logging on the server-side (Node.js) using Firebase Functions' logging API. I
so then don't include it in the :app files and you should be good
numbered_headings/update.cljs required it, maybe accidentally
:app {:target :browser
:ns-exclude-regexp #"^numbered-headings\.server\..*" ;; <--- Exclude server code -- is this the correct syntax to exclude server folder?
that is not an option that exists or has ever existed
only the code that you require is actually included, so you need to remove that require in the namespace
if i remove the require namespaces like ["firebase-functions" :as functions] or ["firebase-functions/logger" :as logger] from server.cljs or update.cljs then GCP cloud function will stop working
that is not the require I'm talking about
Dependency Trace:
numbered_headings/ui/modules/page_hidden.cljs
numbered_headings/update.cljs
numbered_headings/server/log.cljs
node_modules/firebase-functions/lib/logger/index.js
node_modules/firebase-functions/lib/common/trace.jsthis is telling you that numbered_headings/update.cljs is requiring numbered_headings/server/log.cljs
I'm guessing that the server.log thing is intended only for the server
so in numbered_headings/update.cljs you remove the require to numbered-headings.server.log
I don't know what any of your code does, so this you have to figure out on your own
could be that numbered_headings/ui/modules/page_hidden.cljs isn't supposed to require the update ns, no clue
it is resolved now .. thanks a lot for helping.!!