2012-07-08 14 views
5

サブディレクトリにCoffeeScriptのコンパイル順を定義する方法はありますか?CoffeeScript - サブディレクトリのコンパイル順序

ファイル:

  • のsrc/App.coffee
  • のsrc /ビュー/ B.coffee
  • のsrc /ビュー/ A/A.coffee
は、次の例を考えてみてください。

クラスAはBを拡張する。

coffee --join js/app.js --compile src/view/ src/App.coffee 

これは、ブラウザでエラーがスローされます:

Uncaught TypeError: Cannot read property 'prototype' of undefined 

私はへのzフォルダの名前を変更すると、エラーがなくなって、すべてが正常に動作します。私はそれがSRC /ビュー/サブディレクトリに入る前に、コンパイラが/ srcに/ビューからすべての.coffeeファイルを読むことを期待する /A.coffee

/ビュー

  • のsrc/Z 。もう一度、それを行う方法はありますか?

    編集: PCのWindows 7、 CoffeeScriptのバージョン1.3.3

+0

これは、標準の* nix動作の結果です。すべてがフォルダを含めてアルファベット順にリストされています。 --compile src/view/B.coffee src/view/a/src/App.coffee'を試してみてください。 –

+0

すべてのsrc/view/[。coffee]ファイルを追加してから、すべてのsrc/view/[folders]を追加した場合にのみ動作します。一般的なsrc/view/ – imbrizi

+0

で動作しません--compile src/view/*。coffee src/view/a/src/App.coffee'は私のために働いた –

答えて

5

私が思う唯一の解決策は、ビルドスクリプト内で手動コンパイル順を作成することです。 ファイル名で順序付けされたコレクションを作成します。ループとして、新しい大きな文字列を繰り返して1つのファイルとしてコンパイルできます。

次の内容のCakefileを作成するには、まず構文をチェックします。 cake buildで実行します。それは動作するはず、ケーキにはCoffeeScriptが付属しています。最初のループの前に

CoffeeScriptのhttps://github.com/jashkenas/coffee-script/wiki/[HowTo]-Compiling-and-Setting-Up-Build-Toolsのウィキでも文書化

fs = require 'fs' 
{exec} = require 'child_process' 

viewsDir = "src/view" 
coffeeFiles = [ 
    'B' 
    'A' 
] 

task 'build' 
    # loops through coffeeFiles. 
    for file, index in coffeeFiles then do (file, index) -> 
    fs.readFile "#{viewsDir}/#{file}", 'utf8', (err, content) -> 
     appCoffee[index] = content 
     compile() if --remaining is 0 

    compile = -> 
    fs.writeFile 'js/app.coffee', appCoffee.join('\n\n'), 'utf8', (err) -> 
     throw err if err 
     exec 'coffee --compile js/app.coffee', (err, stdout, stderr) -> 
     throw err if err 
      console.log stdout + stderr 

      # you can skip deleting the app.coffee file 
      fs.unlink 'js/app.coffee', (err) -> 
      throw err if err 
      console.log 'Created app.coffe, compiled to app.js and removes app.coffee' 

      # maybe additional taks 
      # invoke 'test' 

あなたはまた、別のディレクトリを介してループを作ることができます。そして、リストされていないものの前に処理されるcoffeeFilesにファイル名をリストし、残りはfs.readDir()でリストに追加することができます。

2

我々は、同様の問題を解決するための簡単なモジュールを作成しました:

https://github.com/Vizir/rehab

はちょうどあなたのファイルに#_require [filename].coffeeを入れて、あなたは完了です。

私たちは複雑な依存関係グラフを持つプロダクションでこれを使用しています。