Ausgabe
Ich folge der Schnellstartdokumentation von shadow-cljs für ein minimales Beispiel eines Projekts. Hier ist der Link .
Anfangs hatte ich diese shadow-cljs.edn
Datei:
;; 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}}
}}}
Bei /Users/pedro/projects/acme-app/src/main/acme/frontend/app.cljs
habe ich auch:
(ns acme.frontend.app)
(defn init []
(println "Hello World"))
Ich kann es mit dem Befehl erstellen und ansehen:
$ 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)
Ich habe Abhängigkeiten hinzugefügt wie:
: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"]]
Der Build ändert sich jedoch nicht in Bezug auf files
, compiled
, und warnings
. Nur die Zeit ändert sich ein wenig – die Zeit ist wahrscheinlich etwas zufällig/stochastisch (79 files, 0 compiled, 0 warnings, 5.59s)
.
Sind die Abhängigkeiten wirklich kompiliert? Woher weiß ich, ob die Abhängigkeiten auch kompiliert wurden?
Wenn sie kompiliert werden, warum bleibt die Anzahl der Dateien gleich?
Bem.: Beachten Sie, dass ich die Funktion, die innerhalb der Abhängigkeiten verwendet wird, nicht aufrufe – und ich möchte sie nicht aus Debugging-Gründen aufrufen.
Lösung
Das Hinzufügen von :dependencies
tut sehr wenig, sie werden nicht alleine kompiliert. Sie werden nur auf dem Klassenpfad zur Verfügung gestellt .
Sie werden erst kompiliert und geladen, wenn Sie sie :require
in den ns
Formularen Ihrer Dateien oder dynamisch require
bei der REPL hinzufügen. Ohne eine explizite Anforderung (dh. :require
), sie zu laden, sind sie nur passive Ressourcen, die nicht verwendet werden.
Beantwortet von – Thomas Heller
Antwort geprüft von – Willingham (FixError Volunteer)