2011-04-17 18 views
19

Değişkenlerimi gizleyen otomatik kapanma sarmalayıcılarını global kapsamdan nasıl çıkarabilirim? CoffeeScript'in kapatma paketleyicisinden kurtulma

(function() { 
    // my compiled code 
}).call(this); 

Sadece CoffeeScript + SproutCore ile oynamak ve olduğu gibi tabii ki, kapsamını bırakmayı tercih ediyorum: Bu durumda üzerine yazılmasını şey korumak için gerek yoktur.

Bildirimde @ veya this. kullanabileceğimi biliyorum, ancak bu çok zarif değil.

+0

Bunu yapmamak için _really_ gerekir. Yerel değişkenlerinizin global kapsam içine sızmasını istemezsiniz. – shesek

+5

@shesek belki bir bundler kullanıyor? zaten her şeyi bir kapsamda sarar? Veya RequireJS kullanıyor? Sarıcı kapsamının isteğe bağlı olması gerektiğini düşünüyorum. – benqus

+0

@benqus - kabul ettim, ya kendi sargımı kullanıyorum ya da örneğin birden fazla dosyayı tek bir büyük sarıcıda birleştirerek mengene kullanarak kullanıyorum. Ama aksi halde çirkin bir şey bulursan, onu ihmal etmemelisin. –

cevap

42

Hızlı ve kirli çözüm: Konsol bayrağı -b'u (çıplak) kullanın. Uyarı: Bunu yaparsan, yavru kedi ölecek!

Temiz çözüm: Bunu yapmayın.

Usage: coffee [options] path/to/script.coffee 

    -c, --compile  compile to JavaScript and save as .js files 
    -i, --interactive run an interactive CoffeeScript REPL 
    -o, --output  set the directory for compiled JavaScript 
    -j, --join   concatenate the scripts before compiling 
    -w, --watch  watch scripts for changes, and recompile 
    -p, --print  print the compiled JavaScript to stdout 
    -l, --lint   pipe the compiled JavaScript through JSLint 
    -s, --stdio  listen for and compile scripts over stdio 
    -e, --eval   compile a string from the command line 
    -r, --require  require a library before executing your script 
    -b, --bare   compile without the top-level function wrapper 
    -t, --tokens  print the tokens that the lexer produces 
    -n, --nodes  print the parse tree that Jison produces 
     --nodejs  pass options through to the "node" binary 
    -v, --version  display CoffeeScript version 
    -h, --help   display this help message 
+11

Bu cevap doğrudur, ancak hemen hemen tüm durumlarda -b'nin ağır bir şekilde cesaret kırıldığını belirtmek gerekir. [İşte nedeni] (http://stackoverflow.com/questions/5211638/pattern-for-coffeescript-modules/5212449#5212449). –

+0

Teşekkürler! bir şekilde onu özledim ... – Zeppelin

+0

Bunu yapmak için çok kötü bir şeyden bahsetmediği için kahve -b – coool

7

Genel değişkenlerimi işlevimin genel nesnesine eklemek olan başka bir seçenek kullandım. Benimkini 'pencereye' ekledim. Bu, JavaScript'inizi kapsülleyken tutar ve sadece global kapsamda ihtiyacınız olan değişkeni ortaya çıkarır.

+0

Sunucuda bunun yerine 'şunu 'kullanın. Daha da iyisi, her ikisi için de 'yi kullanın. –