【问题标题】:Calling methods from task in Cakefile从 Cakefile 中的任务调用方法
【发布时间】:2012-03-28 02:00:01
【问题描述】:

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

我在这里做错了什么?

【问题讨论】:

    标签: coffeescript cakefile


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-16
      • 2013-09-15
      • 2014-07-27
      • 1970-01-01
      • 2023-04-08
      • 2020-04-06
      • 2023-01-24
      • 1970-01-01
      相关资源
      最近更新 更多