2014-06-06 5 views
9

clojurescript 프로젝트에서 임의의 node.js 모듈을 사용할 수 있습니까? 그렇다면 어떻게 그들을 포함시켜야합니까? 그렇지 않다면 왜 안 되겠습니까? 당신이 최적화 없음을 사용하지 않는 경우clojurescript에서 임의의 노드 모듈을 사용할 수 있습니까?

(def fs (js/require "fs")) 
(println (.readdirSync fs js/__dirname)) 

가 externs에주의 :

답변

9

은 예, 할 수 있습니다, 그것에 대해 특별한 것은 없다.

편집 : 다양한 JS 패키지 관리자?
아니와 leiningen 플레이를한다. 언어에는 패키지가 없으므로 알 수 없습니다. js 의존성 관리와 lein deps도해야합니다. 이 두 패키지 관리자를 통합하는 데 도움이되는 lein-npmlein-bower이 있습니다.

+0

는 다양한 JS 패키지 관리자와 leiningen 플레이를합니까? – Bill

+0

아니요. 언어에는 패키지가 없으므로 알 수 없습니다. js 의존성 관리와 lein deps도해야합니다. 이들을 통합하는데 도움이되는 [lein-npm] (https://github.com/bodil/lein-npm)과 [lein-bower] (https://github.com/chlorinejs/lein-bower)가 있습니다. 두 명의 패키지 관리자 – Joaquin

+0

cljs 네임 스페이스에 노드 모듈 (예 : "fs")이 있어야 해당 메소드에 직접 액세스 할 수 있습니까? 이 경우, 우리는'(readdirSync js/__ dirname)'을 말할 수 있기를 원할 것입니다. – George

0

ClojureScript 1.9.854 이후로 npm 모듈을 종속성으로 선언하고 네임 스페이스에서 요구하도록 지원하는 것이 더 좋습니다. (당신이 lein/boot가 자동으로 설치하려는 경우 :install-deps 하나와 함께) 종속성으로 선언하기 위해

, 당신은 :npm-deps 컴파일러 옵션을 사용해야합니다.

:npm-deps은 키워드와 문자열 사이의 맵입니다. 여기서 키워드는 npm을 사용하여 설치하는 데 사용할 종속성의 이름이고 종속성의 버전은 문자열입니다.

(당신이 lein-cljsbuild를 사용하는 경우) 당신이 순서대로, 당신의 project.clj에 추가 할 수 있는지의 예는 네임 스페이스에서 다음 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}}]}) 

그리고를 사용하는, 그렇게처럼 필요할 수 있습니다 :

(ns left-pad-demo.core 
    (:require left-pad)) 

정도 :

(ns left-pad-demo.core 
    (:require ["left-pad" :as lp])) 

전체 작업

(ns left-pad-demo.core 
    (:require left-pad)) 

(defn -main [s length] 
    (console.log (left-pad s length))) 

(set! *main-cli-fn* -main) 

참고 : 보내고 네임 스페이스처럼 보일 수

관련 문제