2014-06-06 19 views

risposta

9

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.

+0

fa giocare Leiningen con i vari gestori di pacchetti js? – Bill

+0

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

+0

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

0

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:

Problemi correlati