2012-01-07 12 views
7

मैं एक वेब सेवा के कार्यान्वयन पर काम कर रहा हूं जहां हम कॉफीस्क्रिप्ट में हमारे फ्रंट एंड कोड लिख रहे हैं। समस्या जिस पर मैंने ठोकर खाई है, जबकि परियोजना बढ़ रही है कार्यक्षमता को विभिन्न फाइलों में अलग किया जाना है। मुझे वास्तव में एक साधारण संरचना है जहां utils.coffee फ़ाइल में मेरे पास सामान्य कार्य होंगे जो प्रत्येक पृष्ठ से और प्रत्येक अलग फ़ाइल पर आवश्यक होंगे, मेरे पास page_foo.coffeepage_bar.coffee विशिष्ट कार्य होंगे। मैं इसे ठीक से कैसे व्यवस्थित कर सकता हूं इसलिए मैं यह भी सुनिश्चित करता हूं कि utils.coffee पहले लोड हो और सभी से सुलभ हो?एकाधिक कॉफीस्क्रिप्ट फ़ाइलों को व्यवस्थित करना

+1

यह कॉफीस्क्रिप्ट के लिए विशिष्ट नहीं है, लेकिन जावास्क्रिप्ट के साथ एक सामान्य समस्या है। यह कहा जा रहा है ... देखें ["संरचनात्मक कॉफ़ीस्क्रिप्ट कोड?"] (Http://stackoverflow.com/questions/6150455/structuring-coffeescript-code), और विशेष रूप से मेरा उत्तर [यहां] (http://stackoverflow.com/प्रश्न/6150455/संरचना-coffeescript-कोड/8303780 # 8303780)। Require.js के लिए – shesek

उत्तर

3

आप देख सकते हैं कि यह gae-init प्रोजेक्ट में कैसे किया गया है (अस्वीकरण: मैं निर्माता हूं)।

मूल विचार यह है कि आपके पास एक विशिष्ट निर्देशिका में सभी *.coffee फ़ाइलें हैं, और फिर एक बिल्ड स्क्रिप्ट जो सभी फ़ाइलों को संकलित करती है और उन्हें सही पथ में डालती है।

चूंकि आप इसे विकसित करते समय आसानी से डीबग करने में सक्षम होना चाहते हैं, तो बिल्ड स्क्रिप्ट में उन्हें संकलित करने का विकल्प होना चाहिए और & को गठबंधन करने के लिए एक और विकल्प होना चाहिए।

+0

धन्यवाद मैंने इसकी उत्कृष्टता के कारण केवल अपना जवाब बदल दिया। यह न केवल कॉफी के लिए एक प्रदर्शन अनुकूलित संरचना प्रदान करता है बल्कि औजारों का एक बड़ा ढेर जो मैं आमतौर पर उपयोग करता हूं। – topless

+2

मुझे यह भी पता नहीं था कि आप एक जवाब "अस्वीकार्य" कर सकते हैं :) यदि आप उस मार्ग पर जाते हैं तो आपको कॉफीस्क्रिप्ट की अपनी [केक] (http://coffeescript.org/#cake) उपयोगिता में देखना चाहिए (ढेर में एक कम भाषा फिर) –

+0

यह एक अच्छा विचार है, लेकिन यह आपको एक ही नाम के साथ 2 फाइलें रखने से रोकता है, जैसे विचार/navItem और मॉडल/navItem – dezman

5

निष्पादन आदेश ब्राउज़र पर सम्मानित है, इसलिए पहले utils.js पहले शामिल करें।

कोडकिट (http://incident57.com/codekit/) जैसे टूल को संकलित और छोटा कर सकते हैं + अपने सभी .coffee फ़ाइलों में एक .js में शामिल हो सकते हैं, यह भी एक शेल स्क्रिप्ट के साथ करना आसान है।

यदि आपका ऐप वास्तव में बड़ा है, तो require.js और Asynchoronous Module Loading पर पढ़ें। यह आप बहुत आसानी से निर्भरता प्रबंधन करने के लिए और केवल लोड क्या आवश्यक है की अनुमति देगा:

# page_foo.coffee 
define ['lib/utils'], ($) -> 
    // code that uses 'utils' 
+0

+1 - यह हमारे लिए वास्तव में अच्छा काम करता है। – domenukk

2

मैं क्या, एक पूर्व निर्धारित अनुक्रम में शामिल होने और फाइलों को संकलित करने के लिए एक केक कार्य लिखने के लिए उदाहरण

task 'build', 'join and compile *.coffee files', -> 
    exec "coffee -j #{outJS}.js -C#{strFiles}", exerr 

के लिए है जहां outJS फ़ाइल नाम है जहां मैं संकलित जावास्क्रिप्ट और strFiles फ़ाइल नामों की एक स्ट्रिंग है

इसके अतिरिक्त आप YUICompressor या अपने पसंदीदा टूल का उपयोग करके संकलित कोड को छोटा करने के लिए कार्य जोड़ सकते हैं। और विकास देख दौरान,, में शामिल होने के संकलन भी स्वचालित किया जा सकता

task 'watch', 'watch and compile changes in source dir', -> 
    watch = exec "coffee -j #{outJS}.js -cw #{strFiles}" 
    watch.stdout.on 'data', (data)-> process.stdout.write data 

सुनिश्चित करते हुए this gist

7
CoffeeToaster साथ

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

डॉक्स पर एक नज़र डालें:
http://github.com/serpentem/coffee-toaster

यह एक पैकेजिंग प्रणाली है कि जब सक्षम अपनी कक्षाओं के लिए घोषणाओं नामस्थान के रूप में आप ऐसा चाहते हैं, तो अपने फ़ोल्डर के पदानुक्रम का उपयोग करेगा, तो आप वर्गों से फैली कर सकते हैं के साथ भी आता है एक से अधिक फ़ाइलों, जैसे आयात और पुत्र करते हैं: निर्माण विन्यास

#<< another/package/myclass 
class SomeClass extends another.package.MyClass 

अत्यंत सरल है:

# => SRC FOLDER 
toast 'src_folder' 
    # => VENDORS (optional) 
    # vendors: ['vendors/x.js', 'vendors/y.js', ... ] 

    # => OPTIONS (optional, default values listed) 
    # bare: false 
    # packaging: true 
    # expose: '' 
    # minify: false 

    # => HTTPFOLDER (optional), RELEASE/DEBUG (required) 
    httpfolder: 'js' 
    release: 'www/js/app.js' 
    debug: 'www/js/app-debug.js' 

यहां एक डीबग विकल्प भी है जो डिबगिंग प्रक्रियाओं और अन्य उपयोगी सुविधाओं को आसानी से फ़ाइलों को संकलित करता है।

+0

मैं एक जटिल नेमस्पेस का पर्दाफाश कैसे कर सकता हूं उदा। acme.sales.admin ताकि यह मेरे ऐप के लिए जड़ है? –

+0

आप इन फ़ोल्डर्स को एक दूसरे के अंदर बनाते हैं और अपनी फाइलें "acme/sales/admin/yourfile.coffee" के अंदर डालते हैं। –

+0

कॉफी टॉस्टर [बंद कर दिया गया है] (https://github.com/arboleya/coffee-toaster/wiki) और एक नई परियोजना के लिए फोर्क किया गया, [पोल्वो] (https://github.com/polvo/polvo)। –

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