Czy można używać dowolnych modułów node.js w projekcie clojurescript? Jeśli tak, jak mam je uwzględnić? Jeśli nie, dlaczego nie?Czy mogę używać dowolnych modułów węzłów z clojurescript?
Odpowiedz
Tak, można, nie ma nic szczególnego w tym:
(def fs (js/require "fs"))
(println (.readdirSync fs js/__dirname))
Bądź ostrożny z eksternów jeśli nie używać optymalizacje żadnego.
Edycja: Czy Leiningen grać z różnych menedżerów pakietów js ?:
Nie. Ponieważ język nie ma pakietów, nie może tego wiedzieć. Musisz wykonać zarządzanie zależnością js i usunąć lein. Istnieje lein-npm i lein-bower, aby pomóc w integracji tych dwóch menedżerów pakietów.
Od ClojureScript 1.9.854, istnieje lepsza obsługa deklarowania modułów npm jako zależności i wymaganie ich od twoich przestrzeni nazw.
W celu zadeklarowania go jako zależność, trzeba użyć opcji kompilatora :npm-deps
(wraz z jednym :install-deps
, jeśli chcesz lein
/boot
aby automatycznie zainstalować).
:npm-deps
to mapa od słowa kluczowego do łańcucha, gdzie słowo kluczowe to nazwa zależności, której należy użyć do zainstalowania go przy użyciu npm
, a ciąg jest wersją zależności.
Przykładem tego, co można dodać do swojej project.clj
(jeśli używasz lein-cljsbuild), w celu korzystania left-pad:
: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}}]})
a następnie z przestrzeni nazw można wymagać to tak:
(ns left-pad-demo.core
(:require left-pad))
Albo tak:
(ns left-pad-demo.core
(:require ["left-pad" :as lp]))
pełny praca nazw ing mógłby wyglądać następująco:
(ns left-pad-demo.core
(:require left-pad))
(defn -main [s length]
(console.log (left-pad s length)))
(set! *main-cli-fn* -main)
Literatura:
- 1. Czy mogę używać dowolnych danych do wyszukiwania drzew KD?
- 2. Używanie pakietu WWW do ładowania plików CSS z modułów węzłów
- 3. Proguard - również używać plików PROGUARD z modułów
- 4. ReactJS.net - Jak używać modułów ES6
- 5. Importowanie modułów węzłów za pomocą elektronów i systemjsów
- 6. Czy mogę używać JSPM bez transpilera?
- 7. call ClojureScript z Javascript
- 8. Jak mogę uzyskać przestrzeń nazw Clojurescript, z której pochodzę, w programie programu clojurescript?
- 9. Czy mogę używać C++ 11 z Xcode?
- 10. Czy mogę używać Tensorboard z Google Colab?
- 11. Czy mogę używać atrybutów z klasami anonimowymi?
- 12. Czy mogę używać JQuery Mobile z EmberJS?
- 13. Czy mogę używać nHibernate z monotouch?
- 14. Czy mogę używać wcześniej: wszystko z kapibar?
- 15. Czy mogę używać T4 programowo z C#?
- 16. Czy mogę używać Artifactory z PIP Python?
- 17. Nie można wymagać modułów węzłów w WebWorker (NWJS)
- 18. Jak debugować ClojureScript
- 19. Jak mogę określić mapę z dowolnych klawiszy w modelu Swagger
- 20. ClojureScript bez Java
- 21. W XPath można używać operatora OR z nazwami węzłów?
- 22. Czy mogę użyć biblioteki węzłów na serwerze dartu
- 23. Łączenie dowolnych wyrażeń regularnych
- 24. Jak "używać" wielu modułów przy jednym "użyciu"?
- 25. Jak używać modułów C++ w Clang?
- 26. Czy to byłoby uznane za idiomatyczny ClojureScript?
- 27. Czy mogę używać z instrukcją z obiektem MySQLdb.Connection?
- 28. Czy mogę określić opcjonalne zależności modułów w npm pakiet.json?
- 29. Importowanie modułów węzłów z katalogu root przy użyciu es6 i węzeł-babel
- 30. Usuwanie węzłów z XDocument
Czy Leiningen grać z różnych menedżerów pakietów js? – Bill
Nie. Ponieważ język nie ma pakietów, nie może tego wiedzieć. Musisz wykonać zarządzanie zależnością js i usunąć lein. Istnieje [lein-npm] (https://github.com/bodil/lein-npm) i [lein-bower] (https://github.com/chlorinejs/lein-bower), aby pomóc w integracji tych dwóch menedżerów pakietów. – Joaquin
Czy jest możliwe wymaganie modułu węzła (tj. "Fs") w przestrzeni nazw cljs, aby można było uzyskać bezpośredni dostęp do jego metod? W takim przypadku chcielibyśmy móc powiedzieć '(readdirSync js/__ dirname)'? – George