2013-03-27 5 views
10

मैंने अभी कुछ क्लोजरस्क्रिप्ट कोड लिखा है, केवल यह पता लगाने के लिए कि मैं अपने project.clj की निर्भरताओं में सूचीबद्ध पुस्तकालयों में से किसी एक तक नहीं पहुंच पा रहा हूं। क्या यह सही है, यानी कि आप CLJS से क्लोजर लाइब्रेरी का उपयोग नहीं कर सकते हैं जब तक कि वे इसे विशेष रूप से अनुमति देने के लिए डिज़ाइन नहीं किए जाते?क्लोजर और क्लोजरस्क्रिप्ट दोनों में पुस्तकालयों का निर्माण और उपयोग

यदि ऐसा है, तो क्लोजर लाइब्रेरी लेने के लिए कितना अतिरिक्त काम आवश्यक है जो किसी भी जावा इंटरऑप का उपयोग नहीं करता है, और यह स्वयं क्लोजरस्क्रिप्ट कोड मान्य होगा, और इसे क्लोजरस्क्रिप्ट से उपयोग करने योग्य बना देगा? गिटहब के चारों ओर देखने से, कई libs में clj और cljs कोड के लिए अलग-अलग स्रोत निर्देशिकाएं दिखाई देती हैं। क्या ऐसी लाइब्रेरी को मेरे project.clj में जोड़ा जा सकता है और किसी भी प्लेटफ़ॉर्म से तुरंत उपयोग किया जा सकता है?

उत्तर

3

कुछ क्लोजरस्क्रिप्ट differences from Clojure हैं। "Project.clj" से

Dependecies ClojureScript द्वारा लागू/दिखाई/प्रयोग करने योग्य हो सकता है, उदाहरण के लिए, "jayq" पर एक नज़र डालें। आप "project.clj" में शामिल होगा:

(defproject xyz/xyz "0.1.0-SNAPSHOT" 
    :dependencies [[clj-time "0.4.3"] 
       [jayq "2.2.0"] 
        .... 

और फिर ClojureScript फ़ाइल में इसका इस्तेमाल करते हैं:

(ns xyz.some.cljs 
    (:require ... 
      ... 
      [clojure.browser.repl :as repl] 
      [jayq.core :as jq]) 

जबकि "jayq" "बैकएंड" में एक "Clojure" पुस्तकालय नहीं है समझ में आता है क्योंकि यह सिर्फ जावास्क्रिप्ट को लपेटता है, यह क्लोजरस्क्रिप्ट पक्ष पर "project.clj" निर्भरता का उपयोग करने का एक उदाहरण है।

इसके अलावा कोर और कई गैर मुख्य लाइब्रेरीज के सबसे पहले से ही ClojureScript पक्ष में पोर्ट रहे हैं:

  • clojure.set
  • clojure.string
  • clojure.walk
  • clojure.zip
  • clojure.core.reducers
  • गुना वर्तमान में
  • को कम करने के लिए एक उपनाम है 210
  • core.match
  • core.logic (कार्यों में)

अन्य Clojure पुस्तकालयों आदेश ClojureScript में काम करने में ClojureScript सबसेट के अनुरूप करना होगा।

यह ClojureScript repo क्लोन और यह क्या समर्थित की समझ प्राप्त (प्लस अपने खुद के सुविधाओं को जोड़ने के लिए यदि आप साहसी :) महसूस करने के लिए सार्थक है

ClojureScript निर्भरता रहे हैं आमतौर पर "सामने अंत" आधारित (बैकएंड से पोर्ट वाले शामिल)। दूसरे शब्दों में, अंतिम लक्ष्य V8 द्वारा संकलित किया जाना चाहिए और जावास्क्रिप्ट के रूप में चलाया जाना चाहिए, इसलिए क्लोजरस्क्रिप्ट कंपाइलर (उपरोक्त रेपो) द्वारा संकलित किए जा सकने वाले कुछ भी उपयोग किए जा सकते हैं।

+0

धन्यवाद। तो जब मैं अपनी प्रोजेक्ट.जेजे फ़ाइल में जैक जोड़ता हूं, तो संकलक कैसे जानता है कि यह क्लोजरस्क्रिप्ट है? मैं देखता हूं कि जैक की अपनी प्रोजेक्ट फ़ाइल लगभग खाली है: https://github.com/ibdknox/jayq/blob/master/project.clj तो यह कैसे बताता है? –

+0

इसके अलावा, उपरोक्त के विस्तार के रूप में, यदि मैं एक पुस्तकालय लिखना चाहता था जो "सिरों" दोनों से काम करता है, तो मैं इसके बारे में कैसे जाऊं? –

+0

आमतौर पर क्लोजर/क्लोजरस्क्रिप्ट में विकसित होने पर, आप [lein-cljsbuild] (https://github.com/emezeske/lein-cljsbuild) प्लगइन का उपयोग करेंगे जो "project.clj" के माध्यम से CLJS कंपाइलर को कॉन्फ़िगर करने की अनुमति देता है, साथ ही साथ [शेयर कोड] (https://github.com/emezeske/lein-cljsbuild/blob/0.3।0/डॉक्टर/CROSSOVERS.md) जहां आप क्लोजर और क्लोजरस्क्रिप्ट के बीच नामस्थान का पुन: उपयोग कर सकते हैं। बेशक: "याद रखें कि क्लोजर और क्लोजरस्क्रिप्ट दोनों द्वारा नेमस्पेस का उपयोग किया जाएगा, इसलिए इसे केवल" – tolitius

संबंधित मुद्दे