È possibile utilizzare i moduli node.js arbitrari in un progetto clojurescript? Se sì, come faccio a includerli? Se no, perché no?Posso usare moduli di nodi arbitrari da clojurescript?
risposta
Sì, è possibile, non c'è niente di speciale:
(def fs (js/require "fs"))
(println (.readdirSync fs js/__dirname))
stare attenti con gli esterni, se non si utilizza ottimizzazioni nessuno.
Edit: viene riprodotto Leiningen con i vari gestori di pacchetti js ?:
Nope. Dal momento che la lingua non ha pacchetti, non può sapere. Devi fare anche la gestione delle dipendenze js e lein deps. C'è un lein-npm e un lein-bower per aiutare con l'integrazione di questi due gestori di pacchetti.
A partire da ClojureScript 1.9.854, esiste un supporto migliore per dichiarare i moduli npm come dipendenze e per richiedere loro dai propri spazi dei nomi.
Al fine di dichiararla come una dipendenza, è necessario utilizzare l'opzione :npm-deps
compilatore (insieme al :install-deps
uno, se si vuole lein
/boot
per installare automaticamente).
:npm-deps
è una mappa da parola chiave a stringa, dove la parola chiave è il nome della dipendenza che si utilizzerà per installarlo utilizzando npm
e la stringa è la versione della dipendenza.
Un esempio di quello che si potrebbe aggiungere al vostro project.clj
(se si utilizza lein-cljsbuild), al fine di utilizzare 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}}]})
E poi, dal vostro spazio dei nomi, è possibile richiedere in questo modo:
(ns left-pad-demo.core
(:require left-pad))
O almeno così:
(ns left-pad-demo.core
(:require ["left-pad" :as lp]))
Un'opera completa ing namespace potrebbe assomigliare:
(ns left-pad-demo.core
(:require left-pad))
(defn -main [s length]
(console.log (left-pad s length)))
(set! *main-cli-fn* -main)
Riferimenti:
- 1. Come si compilano i moduli Clojurescript da Clojure?
- 2. Come usare clojure.string/unirsi ClojureScript
- 3. Posso usare una libreria di nodi in un server Dart
- 4. Sicurezza di trasmettere tipi arbitrari da utilizzare
- 5. spedizione di moduli python in pyspark ad altri nodi?
- 6. Come posso includere dinamicamente i moduli Perl senza usare eval?
- 7. Posso compilare ClojureScript senza la lib di Google Closure?
- 8. Come posso ottenere lo spazio dei nomi Clojurescript all'interno di un programma clojurescript?
- 9. C++ interi di lunghezza arbitrari
- 10. Posso usare MarshalJSON per aggiungere campi arbitrari a una codifica json in golang?
- 11. Come usare aurelia senza caricatori di moduli?
- 12. Sintassi di richiedere in ClojureScript REPL
- 13. Verifica NaN in ClojureScript
- 14. Come posso confrontare i numeri di versione arbitrari?
- 15. Rimozione nodi da XDocument
- 16. Interop ClojureScript
- 17. wrapping knockout.js con clojurescript
- 18. Come posso usare librerie Perl da PHP?
- 19. ClojureScript: due punti di espressione
- 20. ClojureScript senza Java
- 21. Puoi usare moduli generici in C#?
- 22. Crea hash per oggetti arbitrari?
- 23. Rimozione di nodi vuoti da HTML
- 24. Rimozione dei nodi da XML
- 25. Metadati database personali/arbitrari
- 26. Posso aggiungere dati arbitrari a package.json e come?
- 27. Devo usare delphi tframes per moduli di più pagine?
- 28. Clojurescript, JavaScript, SVG, Grafici, Grafica
- 29. Incorporamento di oggetti arbitrari nel codice Clojure
- 30. Templating in ClojureScript
fa giocare Leiningen con i vari gestori di pacchetti js? – Bill
No. Dal momento che la lingua non ha pacchetti, non può sapere. Devi fare anche la gestione delle dipendenze js e lein deps. C'è un [lein-npm] (https://github.com/bodil/lein-npm) e un [lein-bower] (https://github.com/chlorinejs/lein-bower) per aiutare con l'integrazione di questi due gestori di pacchetti. – Joaquin
E 'possibile richiedere un modulo nodo (ad es. "Fs") in uno spazio dei nomi cljs in modo tale che sia possibile accedere direttamente ai suoi metodi? In questo caso, vorremmo essere in grado di dire '(readdirSync js/__ dirname)'? – George