5

サブディレクトリでCoffeeScriptのコンパイル順序を定義する方法はありますか? 次の例を検討してください。

ファイル:

  • src/App.coffee
  • src/view/B.coffee
  • src/view/a/A.coffee

クラス A が B を拡張する場所。

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

これにより、ブラウザにエラーがスローされます。

Uncaught TypeError: Cannot read property 'prototype' of undefined 

フォルダーの名前をaからzに変更すると、エラーはなくなり、すべて正常に動作します。

  • src/view/ z /A.coffee

src/view/ サブディレクトリに移動する前に、コンパイラが src/view/ からすべての .coffee ファイルを読み取ることを期待します。繰り返しますが、それを行う方法はありますか?

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

4

2 に答える 2

5

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

次の内容で Cakefile を作成し、最初に構文を確認します。で実行しcake buildます。Cake には CoffeeScript が付属しています。

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'

Coffeescript の Wiki にも記載されています https://github.com/jashkenas/coffee-script/wiki/[HowTo]-Compiling-and-Setting-Up-Build-Tools

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

于 2012-07-08T23:50:02.973 に答える
2

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

https://github.com/Vizir/rehab

ファイルを置くだけ#_require [filename].coffeeで完了です。

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

于 2013-02-20T14:03:15.137 に答える