Kann man in einem Clojurescript-Projekt beliebige node.js-Module verwenden? Wenn ja, wie gehe ich sie ein? Wenn nicht, warum nicht?Kann ich beliebige Knotenmodule von Clojurescript verwenden?
Antwort
Ja, kann man, es ist nichts Besonderes an sich:
(def fs (js/require "fs"))
(println (.readdirSync fs js/__dirname))
mit den Externen Seien Sie vorsichtig, wenn Sie Optimierungen nicht keine Verwendung.
Edit: Hat Leiningen Spiel mit den verschiedenen js Paket-Manager ?:
Nope. Da die Sprache keine Pakete hat, kann sie nicht wissen. Sie müssen js Abhängigkeitsverwaltung und lein Deps auch tun. Es gibt eine lein-npm und eine lein-bower, um bei der Integration dieser beiden Paketmanager zu helfen.
Seit ClojureScript 1.9.854 gibt es bessere Unterstützung, um npm-Module als Abhängigkeiten zu deklarieren und sie von Ihren Namespaces zu verlangen.
Um es als eine Abhängigkeit zu erklären, müssen Sie die :npm-deps
Compiler-Option verwenden (zusammen mit dem :install-deps
ein, wenn Sie möchten lein
/boot
, um es automatisch zu installieren).
:npm-deps
ist eine Zuordnung von Schlüsselwort zu Zeichenfolge, wobei das Schlüsselwort der Name der Abhängigkeit ist, die Sie verwenden würden, um es mit npm
zu installieren, und die Zeichenfolge ist die Version der Abhängigkeit.
Ein Beispiel von dem, was Sie zu Ihrem project.clj
hinzufügen könnten (wenn Sie lein-cljsbuild verwenden), um left-pad: zu verwenden
:cljsbuild {:builds [{:id "prod"
:source-paths ["src"]
:compiler {:main left-pad-demo.core
:output-to "package/index.js"
:target :nodejs
:output-dir "target"
:optimizations :simple
:install-deps true
:npm-deps {:left-pad "1.2.0"}
:pretty-print true}}]})
Und dann, aus Ihrem Namensraum, können Sie es wie so benötigen:
(ns left-pad-demo.core
(:require left-pad))
Oder so:
(ns left-pad-demo.core
(:require ["left-pad" :as lp]))
Eine vollständige Arbeit ing Namespace könnte wie folgt aussehen:
(ns left-pad-demo.core
(:require left-pad))
(defn -main [s length]
(console.log (left-pad s length)))
(set! *main-cli-fn* -main)
Referenzen:
- 1. Verwenden von Webpack zum Laden von CSS-Dateien von Knotenmodule
- 2. So verwenden Sie Knotenmodule im Browser
- 3. Verwenden LINQ für beliebige
- 4. Wie Knotenmodule programmgesteuert aktualisieren
- 5. Wie kann ich den Clojurescript-Namespace, in dem ich mich befinde, aus einem Clojurescript-Programm beziehen?
- 6. webpack Split Knotenmodule von App
- 7. Aufruf ClojureScript von Javascript
- 8. ClojureScript clojure.set?
- 9. Verwenden glob beliebige Länge Zahlen
- 10. Wie kann ich eine beliebige Länge Liste von IO Bool
- 11. Wie clojure.string verwenden/join in clojurescript
- 12. Wie ClojureScript
- 13. package.json für globale Knotenmodule
- 14. Können Knotenmodule einander benötigen
- 15. Design und Implementierung von ClojureScript
- 16. Wie kann ich on-DOMCharacterDataModified mit Clojurescript Regent
- 17. Wie gehe ich mit dem erforderlichen Clojurescript-Code von Clojurescript-Makros um?
- 18. Einschließlich Knotenmodule auf meiner Seite
- 19. ClojureScript ohne Java
- 20. nodejs: Knotenmodule vs Singleton-Klassen
- 21. Grails + ClojureScript
- 22. clojurescript breakpoints
- 23. Wie kann ich eine Sitzung für beide Clojure/Skript verwenden
- 24. Python: beliebige Reihenfolge von
- 25. Scripting Javascript in Clojurescript
- 26. Wie kann ich spezifische Knotenmodule der Abhängigkeiten meines Pakets in den Paketpackern von react-native auflisten?
- 27. Wie man Knotenmodule richtig benutzt
- 28. Wie werden Knotenmodule global installiert?
- 29. Wie kann ich meiner ASP.NET-Anwendung mitteilen, eine beliebige Version einer stark benannten Assembly zu verwenden?
- 30. Browserify lädt keine Knotenmodule im Browser
Hat Leiningen Spiel mit den verschiedenen js Paket-Manager? – Bill
Nein. Da die Sprache keine Pakete hat, kann sie nicht wissen. Sie müssen js Abhängigkeitsverwaltung und lein Deps auch tun. Es gibt ein [lein-npm] (https://github.com/bodil/lein-npm) und ein [lein-bower] (https://github.com/chlorinejs/lein-bower), um diese zu integrieren zwei Paketmanager. – Joaquin
Ist es möglich, ein Knotenmodul (d. H. "Fs") in einen cljs-Namespace zu integrieren, sodass Sie direkt auf seine Methoden zugreifen können? In diesem Fall würden wir sagen können: (readdirSync js/__ dirname) '? – George