从Cakefile中的任务调用方法

时间:2012-03-27 17:48:36

标签: coffeescript cakefile

我正在设置一个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'

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

问题是您在使用行concatinate定义concatinate之前尝试拨打concatinate =。只需向上移动声明,或者更好的是,将其移出任务定义之外。

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