0

我正在设置一个 Cakefile,它将编译和缩小我的 CoffeeScript 并缩小我的 Vanilla 库。

我为每种情况创建了不同的任务(无论它是否是咖啡文件),但我想将它们组合成一个任务。

我遇到的问题是从任务中调用一个方法;在某些情况下我可以毫无问题地调用方法,否则我会收到

    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

问题是您在使用 lineconcatinate定义之前尝试调用。只需将声明向上移动,或者更好的是,将其移动到任务定义之外。concatinateconcatinate =

您可能已经习惯了 JavaScript 的function concatinate语法,它会自动将函数移动到作用域的顶部。CoffeeScript 编译为concatinate = function语法,主要是因为function cocatinate语法在不同的 JS 运行时(尤其是 IE)中表现不一致。因此,CoffeeScript 函数只是遵循普通的变量赋值规则。

于 2012-03-27T18:00:01.277 回答