2011-04-22 4 views
1

私はsrc/templates/ディレクトリに口ひげテンプレートがいっぱいです。どのようにしてそれらのコンテンツを結合したり縮小したりして、CoffeeScriptアプリケーションで使用できるようになりましたか?CoffeeScript/Cakeでテンプレートを結合して小さくします

CoffeeScript srcをjsに結合して縮小する方法については、すでにhttps://github.com/jashkenas/coffee-script/wiki/%5BHowTo%5D-Compiling-and-Setting-Up-Build-Toolsの指示に従っています。

答えて

7

まず、テンプレートがグローバルオブジェクトにエクスポートされていると仮定します(たとえば、それぞれuserpane =ではなくwindow.userpane =)。それが最も重要なことです。あなたがそれをしていて、連結してコンパイルしているのであれば、各連結の後に自動的に縮小を行うことだけです。

短い回答:これについてはまだ良いツールはありません。あなたの最良のオプションは、次のような行を使用して、既存のCakefileを拡張することである

fs.watchFile 'concatenated.js', -> 
    exec 'uglifyjs concatenated.js' 

npm install uglify-jsを実行し、UglifyJSをインストールするには。)今

、これはあなたのスクリプトが連結されていることを確実にすることの問題を解決することはできません賢明な順序で。 (たとえば、ファイルAにwindow.templates = {}、ファイルBにがある場合は、ファイルBより前にファイルAを連結することが非常に重要です。そのためには、Sprocketsを目にしておく必要があります。各JSファイルの依存関係を調べ、それらの依存関係を尊重した順序で結合します。 Sprocketsの創始者、Sam StephensonはCoffeeScriptコミュニティの積極的なメンバーであり、SprocketsのCoffeeScriptのファーストクラスのサポートはSprockets 2(repo here)に入っています。

更新:ここtemplateディレクトリ内のすべての実際の読み取りと連接を行うにはケーキのタスクです:

templateJs = '' 
files = fs.readdirSync 'template' 
for file in files 
    contents = fs.readFileSync file, 'utf8' 
    name = file.replace /\..*/, '' # remove extension 
    templateJs += "window.#{name} = '#{contents}';" 

その後templateJsであなたの連結JSを付加。これは、テンプレートに一重引用符(')がないことを前提としています。バックスラッシュを前に置くか、一貫して二重引用符を使用します。

+0

ありがとうございました。私はこれを試して、それがどうなるか見てみましょう。 – devth

+0

あなたの答えが解決しないことの1つは、実際に私のテンプレートの内容をJSオブジェクト(例えば、 'window.templates')に取り込むことです。テンプレートファイルはちょうど純粋なひげそりであるので、それらのテンプレートを読み込み、それらをグローバルオブジェクトに置き、連結ファイルの先頭に挿入するCakeタスクが必要です。 – devth

+0

(もう1つ)私はほとんどのことを考慮する必要があるCakeタスクで自分の答えを更新しました。残っているのは、同様に '.coffee'ファイルを読み込んでコンパイルし、結果のJSを連結することだけです。 –

関連する問題