2012-05-01 3 views
0

私はすべての私のcoffeescriptファイルを私のレール3.1アセットパイプラインウェブサイトにまとめて、開発ページがより速く読み込まれるようにしようとしています。私は28秒から6秒です。しかし、以前はユニークなローカル関数名がすべて同じファイルにあり、重複していました。私は同じ関数名を維持したいが、ある種の名前空間内で維持したい。2つ以上のcoffeescriptファイルを重複する関数名と一緒にマージするにはどうすればよいですか?

ここにいくつかのサンプルファイルがあります。

ファイルa.js.coffee

root = exports ? this 

$(document).ready -> 
    sayHi() 

root.sayHi = -> 
    greeting() 

greeting = -> 
    alert("Howdy") 

ファイルb.js.coffee

root = exports ? this 

$(document).ready -> 
    sayHello() 

root.sayHello = -> 
    greeting() 

greeting = -> 
    alert("Hi there") 

は、どのように私は一緒にこれらの2つのファイルの内容を参加し、まだ二つの別々のgreetingの機能を保つことができますか?

#------------------ 
# from a.js.coffee 
#------------------ 

root = exports ? this 

$(document).ready -> 
    sayHi() 

root.sayHi = -> 
    greeting() 

greeting = -> 
    alert("Howdy") 

#------------------ 
# from b.js.coffee 
#------------------ 

root = exports ? this 

$(document).ready -> 
    sayHello() 

root.sayHello = -> 
    greeting() 

greeting = -> 
    alert("Hi there") 
+1

ファイルにどのように参加していますか?デフォルトでは、コーヒーはIIFE( '(function(){...)()'で各ファイルをラップして、それらの衝突を回避します。 –

+0

個々のcoffeescriptファイルの内容を1つの大きなファイルに物理的にコピーしています。私の開発マシン上のRailsサーバーは、各ファイルを個別にページをレンダリングするには時間がかかりすぎています。マージする前に1ページを終了するのに28秒かかりました。マージ後には4秒しかかかりません。 –

答えて

2

ab.js.coffee

新しいファイルは、関数を名前空間に一つの方法は、単にオブジェクトを使用することです。

#------------------ 
# from a.js.coffee 
#------------------ 

a = 
    sayHi: -> 
    @greeting 

    greeting: -> 
    console.log('a') 
    alert("Howdy") 

#------------------ 
# from b.js.coffee 
#------------------ 

b = 
    sayHello: -> 
    @greeting 

    greeting: -> 
    console.log('b') 
    alert("Hi there") 


#------------------ 
# initializer 
#------------------ 

$(document).ready -> 
    a.sayHi() 
    b.sayHello() 
    return 
+0

私はこれを試してみるつもりです。 "@greeting"とは何ですか?私はかつてそれを見たことがない。 –

+0

ああ、「@」は「this」のエイリアスです。 –

関連する問題