2012-01-07 23 views
7

Kahve kodunda ön uç kodumuzu yazdığımız bir web hizmetinin uygulanması üzerinde çalışıyorum. Tökezlediğim problem, proje büyürken işlevselliğin farklı dosyalarda ayrılması gerektiğidir. Gerçekten ihtiyacım olan şey, utils.coffee dosyasında, her sayfadan gereken genel işlevlere sahip olacak ve her bir ayrı dosyada, page_foo.coffeepage_bar.coffee özel işlevlere sahip olacak basit bir yapıdır. Nasıl düzgün bir şekilde yapılandırabilirim, bu yüzden ilk olarak utils.coffee yüklendiğinden ve herkesten erişilebilir olduğundan emin miyim?Birden fazla CoffeeScript dosyasını düzenleme

+1

Bu, CoffeeScript'e özgü değil, JavaScript ile ilgili genel bir sorun. Bu söyleniyor ... ["Coffeescript kodunun oluşturulması?"] (Http://stackoverflow.com/questions/6150455/structuring-coffeescript-code) ve özellikle benim cevabım [burada] (http://stackoverflow.com)/sorular/6150455/strüktür-CoffeeScript-kodu/8303780 # 8303780). Require.js için – shesek

cevap

3

gae-init projesinde nasıl yapıldığını kontrol edebilirsiniz (Yasal Uyarı: Ben yaratıcıyım).

Temel fikir, belirli bir dizindeki tüm *.coffee dosyalarına sahip olmanız ve ardından tüm dosyaları derleyen ve bunları doğru yollara yerleştiren bir oluşturma komut dosyası olmasıdır.

Kolaylıkla hata ayıklamak isteyebileceğinizden, bunu geliştirirken, derleme betiği bunları derlemek için bir seçeneğe sahip olmalı ve &'u birleştirmek için başka bir seçeneği küçültün.

+0

Teşekkürler. Cevabımı değiştirdim çünkü sadece bunun çok tuhaflığı. Kahve için yalnızca performans açısından optimize edilmiş bir yapı değil, yaygın olarak kullandığım harika bir takım yığını sağlar. – topless

+2

Bir yanıtı “kabul etmeyeceksin” diyemedim bile :) Bu rotaya giderseniz, CoffeeScript'in kendi [kek] (http://coffeescript.org/#cake) yardımcı programına bakmalısınız (yığında bir dil daha o zaman) –

+0

Bu iyi bir fikir, ancak aynı ada sahip 2 dosya sahibi olmanızı engeller, örneğin, view/navItem ve models/navItem – dezman

5

Uygulama siparişi tarayıcılarda dikkate alınır, bu nedenle önce utils.js'u ekleyin.

CodeKit (http://incident57.com/codekit/) gibi bir araç, bir .js içine tüm .coffee dosyalarını bir araya getirebilir ve küçültebilir, bu da bir kabuk betiği ile çok kolaydır.

Uygulamanız çok büyükse, require.js ve Asynchoronous Module Loading numaralı telefondan okuyun. Bu çok kolay bağımlılıklarını yönetmek ve sadece gerekeni yük sağlayacaktır:

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

+1 - bizim için gerçekten iyi çalışıyor. – domenukk

2

Ne yapmam örnek

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

için, önceden belirlenmiş bir sırayla dosyaları katılmak ve derlemek için bir pasta görev yazmaktır Burada outJS derlenmiş JavaScript ve strFiles dosya adının bir dosya adı dizesi olduğu

Ek olarak YUICompressor veya favori aracınızı kullanarak derlenmiş kodu küçültmek için görevler ekleyebilirsiniz. Ve geliştirme izlerken sırasında, birleştirme derleme da

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 

emin olarak this gist CoffeeToaster ile

7

size onlardan üstündeki gerekir dosyaları dahil yeteneğine sahip göz at otomatik hale getirilebilir Son ".js" dosyanız (aynı zamanda tüm CoffeeScript dosyalarınızın bir birleşimi olacak) tarayıcının içinde kullanmak için her şeyin uygun düzende olmasını sağlar.

dokümanlar üzerinde bir göz atın:
http://github.com/serpentem/coffee-toaster

Bu kadar isterseniz sınıflarına bildirimleri ad alanları olarak klasörün hiyerarşisini kullanacak etkinleştirildiğinde, sonra da olabilir sınıfları uzanan bir ambalajlama sistemi ile de geliyor yapı yapılandırması son derece minimalist

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

: gibi birden fazla dosya gibi ithalat ve oğlu yapmak

# => 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' 

Hata ayıklama işlemlerini ve diğer kullanışlı özellikleri kolaylaştırmak için dosyaları tek tek derleyen bir hata ayıklama seçeneği bile var.

+0

Karmaşık bir ad alanını nasıl gösterebilirim örn. acme.sales.admin böylece bu benim app için kök olduğunu? –

+0

Bu klasörleri birbirinizin içinde yaratır ve dosyalarınızı "acme/sales/admin/yourfile.coffee" içine yerleştirirsiniz. –

+0

CoffeeToaster [üretilmiyor] (https://github.com/arboleya/coffee-toaster/wiki) ve [Polvo] (https://github.com/polvo/polvo) yeni bir proje için çatal attı. –