2012-07-09 19 views
25

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

क्या किसी को इस तरह से विकसित एक अच्छी उदाहरण लाइब्रेरी के बारे में पता है, जिसमें कॉफ़ीस्क्रिप्ट का उपयोग आवश्यकता है जैसे कि RequJS, CurlJS, Browserify आदि? मैंने गिथूब को देखा है, और कुछ उदाहरण हैं, लेकिन मैं अपनी जरूरतों के अनुरूप कुछ भी नहीं देख सका।

मैंने Coffee-Toaster की कोशिश की, क्योंकि यह निर्भरता आदि को परिभाषित करने में आसान बनाने में कुछ वादा करता था, लेकिन यह विंडोज पथ (पुराने \ बनाम /) से निपटने में असफल रहा, इसलिए उस पर छोड़ दिया, मुख्य रूप से ऐसा लगता था "लाइट" पक्ष पर थोड़ी सी बात करने के लिए - RequJS जैसी कुछ चीज़ इसके पीछे एक बेहतर समुदाय समर्थन प्रतीत होती है।

आपकी सहायता के लिए धन्यवाद। यदि संभव हो तो मैं वास्तव में काम कर रहे स्रोत कोड उदाहरणों की तलाश में हूं।

+1

मैंने इस प्रश्न को ट्वीट किया। चलो देखते हैं कि कोई जवाब देता है या नहीं। – unscriptable

+0

साझा वस्तुओं को 'विंडो' से जोड़ना और प्रत्येक फ़ाइल को अलग से संकलित करना काम नहीं करता है? कॉफीस्क्रिप्ट कंपाइलर कोई भी जांच नहीं करता है जिसके लिए फ़ाइलों को किसी विशिष्ट क्रम में संकलित करने की आवश्यकता होती है, या संकलन-समय पर एक-दूसरे तक पहुंचने में सक्षम होती है। –

+1

कॉफी टॉस्टर लेखक का नोट: मैं टोस्टर में एएमडी मानकों को लागू कर रहा हूं। यह अब बहुत कुछ बदल जाएगा, लेकिन अंत में मुझे विश्वास है कि यह उपयोग करने के लिए बहुत उपयोगी और सरल होगा। इसके अलावा उपयोगकर्ता अपने इच्छित एएमडी लोडर का उपयोग कर सकते हैं, लेकिन टोस्टर में शायद इसका अपना माइक्रो कार्यान्वयन होगा। –

उत्तर

36

सबसे पहले, यदि आप RequJS का उपयोग कर रहे हैं, तो आपके पास एक परिभाषित फ़ंक्शन से कई "चीजें" लौटने में आसान समय नहीं होगा। RequJS AMD (! NOT! CommonJS) प्रारूप "मानकों" का उपयोग करता है, जिसमें "सामान" निर्यात करने के लिए मॉड्यूल.एक्सपोर्ट ऑब्जेक्ट नहीं होता है बल्कि इसके बदले में कुछ निर्भर करता है।

इसके साथ, मुझे बिल्कुल यकीन नहीं है कि आप यहां क्या देख रहे हैं लेकिन RequJS के साथ कक्षा का काम करना बहुत आसान है। कुछ ऐसा:

define ['my/required/module'], (myModule) -> 
    class MyOtherModule 
     privateField = 0 

     constructor: -> 
     publicMethod: -> 

    return MyOtherModule 

इसका उपयोग किसी अन्य स्क्रिप्ट की तरह एक आवश्यकता/परिभाषित फ़ंक्शन में किया जा सकता है। इस उदाहरण लें:

require ['my/other/module'], (MyOtherModule) -> 
    instance = new MyOtherModule() 

हम भी साथ उपयोग कर सकते हैं "फैली"

define ['my/other/module'], (MyOtherModule) -> 
    class MyThirdModule extends MyOtherModule 
     ... 

उम्मीद है कि इस मदद करता है!

+13

'वापसी MyOtherModule' अनावश्यक है। बस 'क्लास मायऑथर मॉड्यूल' कहकर, आप इसे फिर से शुरू कर रहे हैं यदि यह दायरे में आखिरी चीज है (उदाहरण के लिए, कक्षा _block_ के बाद और कुछ नहीं है)। – hayavuk

+20

सहमत वापसी पूरी तरह से अनावश्यक है कि कॉफीस्क्रिप्ट स्वचालित रूप से अंतिम निष्पादित अभिव्यक्ति को कैसे लौटाएगा। हालांकि, मैं अभी भी ज्यादातर मामलों में इसे वहां छोड़ देता हूं क्योंकि मुझे लगता है कि यह कोड उन लोगों के लिए अधिक पठनीय बनाता है जो कॉफीस्क्रिप्ट (मेरी अधिकांश टीम) सीखने के लिए नए हैं। –

+4

आप का बहुत अच्छा लगा। मैं अकेले काम करता हूं इसलिए यह मेरे लिए कभी नहीं हुआ। :) – hayavuk

1

मैं वास्तव में अभी तक इस तकनीक का इस्तेमाल किया है, लेकिन:

मन यहाँ में रखने के लिए केवल एक चीज है कि CoffeeScript बयान भी मान रहे हैं, जब वे एक समारोह में पिछले रहे हैं। तो, मूल रूप से, निम्नलिखित कोड:

define [],() -> 
    class Main 

करने के लिए अनुवाद:

define([], function() { 
    var Main; 
    return Main = (function() { 

    function Main() {} 

    return Main; 

    })(); 
}); 

और कहा कि अपेक्षा के अनुरूप (मैं कोई कारण नहीं क्यों यह संकलित जावास्क्रिप्ट के आधार पर नहीं होता देखें) काम करना चाहिए।

कोड बेस के प्रबंधन के लिए, मेरा मानना ​​है कि CS plugin काम में आना चाहिए। यह जेम्स बर्क स्वयं द्वारा बनाए रखा जाता है, और कॉफीस्क्रिप्ट परियोजनाओं के निर्माण का समर्थन करता है वैसे ही जावास्क्रिप्ट परियोजनाएं बनाई जाती हैं।

3

मैं कॉफी-टोस्टर का भी उपयोग कर रहा हूं, और मुझे हाल ही में कुछ पोस्ट मिलीं।
मैंने सोचा था कि पढ़ने के लिए लायक था, हो सकता है हम इस पर काम कर सकते हैं:

http://blog.toastymofo.net/2012/04/coffeescript-requirejs-and-you-part-one.html
http://24ways.org/2012/think-first-code-later/

और http://jamjs.org बहुत अच्छा लगता है!

+1

कॉफी-टोस्टर लेखक का नोट: मैं कॉफी टॉस्टर में पारदर्शी एएमडी समर्थन जोड़ने की योजना बना रहा हूं ताकि मॉड्यूलर और समानांतर लोडिंग –

+6

प्राप्त करने के लिए जो भी हो रहा है ... कॉफी-टोस्टर विकास अब बंद हो गया है 12 अप्रैल, 2013 –

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