filecompilationclojurescriptshadow-cljs

Are the added dependencies really been compiled by shadow-cljs? If so, why do the values stay the same?


I am following shadow-cljs Quick Start documentation on a minimal example of a project. Here is the link.

Initially, I had this shadow-cljs.edn file:

;; shadow-cljs configuration
{:source-paths
 ["src/dev"
  "src/main"
  "src/test"]

 :dev-http {8080 "public"}
 :dependencies
 []

 :builds
 {:frontend
  {:target :browser
   :modules {:main {:init-fn acme.frontend.app/init}}
   }}}

In /Users/pedro/projects/acme-app/src/main/acme/frontend/app.cljs, I also have:

(ns acme.frontend.app)

(defn init []
  (println "Hello World"))

I can build and watch it with the command:

$ npx shadow-cljs compile frontend

shadow-cljs - config: /Users/pedro/projects/acme-app/shadow-cljs.edn
shadow-cljs - updating dependencies
shadow-cljs - dependencies updated
[:frontend] Compiling ...
[:frontend] Build completed. (79 files, 0 compiled, 0 warnings, 4.88s)

I have been adding dependencies such as:

:dependencies [[day8.re-frame/re-frame-10x "1.2.1"]
                [proto-repl "0.3.1"]
                [re-frame "1.2.0"]
                [com.degel/re-frame-firebase "0.9.6-SNAPSHOT"]
                [bidi "2.1.5"]
                [re-com "2.13.2-106-180ea1f-SNAPSHOT-TALLYFOR"]
                [com.andrewmcveigh/cljs-time "0.5.2"]
                [com.pupeno/free-form "0.6.0"]
                [binaryage/dirac "RELEASE"]
                [hickory "0.7.1"]
                [cljs-hash "0.0.2"]
                [medley "1.2.0"]]

But, the build does not change in terms of files, compiled, and warnings. Just the time changes a bit - time is probably somewhat random/stochastic (79 files, 0 compiled, 0 warnings, 5.59s).

Are the dependencies really been compiled? How do I know if the dependencies were compiled too?

If they are being compiled, why does the number of files stay the same?

Obs.: note that I am not invoking the function being used inside the dependencies - and I do not want to invoke them for debugging reasons.


Solution

  • Adding the :dependencies does very little, they'll not be compiled on their own. They are only made available on the classpath.

    They will only be compiled and loaded once you add them the :require in the ns forms of your files, or dynamically require at the REPL. Without an explicit request (ie. :require) to load them, they are just passive resources that are unused.