2013-03-13 5 views
5

मैं कुछ जेएस पुस्तकालयों को संकलित करने की कोशिश कर रहा हूं जो हमारे पास क्लोजरस्क्रिप्ट कोड बेस में उन्हें एकीकृत करने के लिए लीन-क्लजस्बिल्ड के साथ हैं। सबसे पहले मैंने प्रत्येक फ़ाइल के शीर्ष पर कुछ goog.provide जोड़ा, और फ़ाइलों को उनके नामस्थान (जैसे जावा में) के अनुसार निर्देशिका पेड़ में श्रेणीबद्ध रूप से व्यवस्थित किया गया है। वह नेमस्पेस एबीसी है src-js/libs/a/b/c.jsClojsScript में Cljsbuild के साथ बाहरी जेएस फाइलों को संकलित करना

मैंने जेएस फाइलों को src-js/libs में प्रोजेक्ट की मूल निर्देशिका में रखा है, और मेरे पास निम्न है: कंपाइलर lein-cljsbuild के लिए विकल्प:

{:id "prod", 
:source-paths ["src-cljs" "src-js"] 
:compiler 
{:pretty-print false, 
    :libs ["libs/"] 
    :output-to "resources/public/js/compiled-app.js", 
    :optimizations :simple}} 

जे एस से कोई भी फ़ाइल संकलित एप्लिकेशन के अंतर्गत फ़ाइल में संकलित किया मिलता है। क्या गलत है?

मैंने सफलता के बिना उन्हें संसाधन/बंद-जेएस/libs में रखने की भी कोशिश की।

मैं lein-cljsbuild 0.3.0 का उपयोग कर रहा हूं।

उत्तर

4

सबसे पहले, कुछ ग्रंथों में जो सुझाव दिया गया है, उसके विपरीत, आपको अपने प्रोजेक्ट.क्लज में किसी भी क्लासपाथ कॉन्फ़िगरेशन स्टेटमेंट में अपनी निजी बंद लाइब्रेरी स्थान शामिल करने की आवश्यकता नहीं है। इसलिए जब तक आपके "स्रोत-पथ:" कथन में "src/js" निर्देशिका शामिल नहीं है, तो किसी अन्य उद्देश्य के लिए, आप इसे हटा सकते हैं।

दूसरा, आपके प्रोजेक्ट.क्लज में जोड़ने के लिए एकमात्र चीज, अपने निजी बंद कोड को लाने के लिए, "libs:" संदर्भ है जो आपने बनाया है; लेकिन आपके द्वारा दर्ज किए गए कार्यों के विपरीत, यह संदर्भ किसी विशिष्ट * .js फ़ाइल (या फ़ाइलों) के लिए होना चाहिए और न केवल एक निर्देशिका होना चाहिए। तो यदि आप जिस लाइब्रेरी का उपयोग करना चाहते हैं वह test.js नाम की फ़ाइल में है और जो/src/js निर्देशिका में रहता है, तो आपकी libs: प्रविष्टि होगी: "src/js/test.js"। यदि आप उस प्लगइन के डिफ़ॉल्ट का उपयोग करना चाहते हैं तो cljs-build रिलीज नोट्स देखें: libs निर्देशिका विकल्प।

तीसरा, (और ऐसा लगता है कि आप इस पहले से ही पता है, लेकिन यह है कि क्या मुझे फिसल गया है) यदि आप एक ब्राउज़र समर्थित आरईपीएल उपयोग कर रहे हैं (repl-सुनने cljsbuild का विकल्प), आप अभी भी लोड करने के लिए सक्षम नहीं होगा/संदर्भ/उस आरईपीएल से अपनी निजी लाइब्रेरी संपत्तियों का उपयोग करें जब तक कि आप इसमें शामिल न हों: आपके compiled-app.js (उदाहरण के लिए "(एनएस परीक्षण (: [myprivatelib] की आवश्यकता है) के लिए स्रोत में कहीं भी कथन की आवश्यकता है)", फिर आपको फिर से अवश्य होना चाहिए -कंपाइल (लीन cljsbuild एक बार) और compiled-app.js के लिंक के साथ अपने ब्राउज़र पेज को पुनः लोड करें। यह उस कोड बेस में लाता है। अन्यथा, आपका ब्राउज़र आरईपीएल केवल जोर दे रहा है कि आपके बंद पुस्तकालय में प्रदान किया गया नामस्थान परिभाषित नहीं किया गया है।

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

src-js (minus, slash नहीं!) क्लासपाथ में नहीं है इसलिए मैं ऐसा करने के लिए जोड़ता हूं। आपको किसी विशेष लाइब्रेरी को निर्दिष्ट करने की आवश्यकता नहीं है, तो आप एक निर्देशिका निर्दिष्ट कर सकते हैं, यह काम करता है लेकिन मेरे पास एक बग था: यह पदानुक्रम में स्वचालित रूप से फ़ाइल को पुन: संकलित नहीं करता है। Cljsbuild के बग ट्रैकर देखें। अंततः मेरी फाइलें संकलित नहीं की गईं क्योंकि ए) उन्हें cljs फ़ाइल में आवश्यक नहीं था। बी) फ़ाइल के साथ एक बग था जिसमें शून्य/हाइफ़न प्रतीकों थे। बग ट्रैकर भी देखें। – z1naOK9nu8iY5A

+0

ठीक है वास्तव में जेएस फ़ाइलों को संकलित करने के लिए एक संपूर्ण निर्देशिका निर्दिष्ट करना संभव है। जैसा कि आपने उल्लेख किया है कि निर्देशिका को निर्दिष्ट किया जाना चाहिए: lib कीवर्ड और नहीं: स्रोत-पथ में। मेरे उदाहरण में: libs "src-js/libs" होना चाहिए और फिर यह काम करता है। – z1naOK9nu8iY5A

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