0

CoffeeScript をコンパイルして縮小し、Vanilla ライブラリを縮小する Cakefile をセットアップしています。

ケースごとに異なるタスクを作成しました (コーヒー ファイルであるかどうかに関係なく) が、それらを 1 つのタスクに結合したいと考えています。

私が抱えている問題は、タスクからメソッドを呼び出すことです。状況によっては問題なくメソッドを呼び出すことができますが、それ以外の場合は受け取ります

    TypeError: undefined is not a function

私が取り組んでいるオブジェクトは次のようになります

source = 
  libs: [
    'lib/jquery-1.7.1.min.js'
    'lib/backbone.js'
    'lib/underscore.js'
  ]
  coffees: [
    'app/800cart.coffee'
    'app/models/coffee/cart.coffee'
    'app/models/coffee/contact.coffee'
  ]

そして、これをやりたいのですが、エラーが発生します

 task 'build', 'Concat, compile, and minify files', ->
    for fileType, files of source
        concatinate files

    concatinate = (files) ->
      console.log 'concatinating'

私が本当に混乱している部分は、条件付きでメソッドを呼び出すと、正常に実行されることです

 task 'build', 'Concat, compile, and minify files', ->
    for fileType, files of source
        concatinate files if fileType is 'coffees'

    concatinate = (files) ->
      console.log 'concatinating'

ここで何が間違っていますか?

4

1 に答える 1

0

問題は、行でconcatinate定義する前に呼び出そうとしていることです。宣言を上に移動するか、できればタスク定義の外に移動してください。concatinateconcatinate =

function concatinateおそらく、関数を自動的にスコープの先頭に移動するJavaScript の構文に慣れているでしょう。CoffeeScript はconcatinate = function代わりに構文にコンパイルします。これは主に、function cocatinate構文が異なる JS ランタイム (特に IE) 間で一貫性のない動作をするためです。したがって、CoffeeScript 関数は、通常の変数割り当て規則に単純に従います。

于 2012-03-27T18:00:01.277 に答える