我正在设置一个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'
我在这里做错了什么?
答案 0 :(得分:0)
问题是您在使用行concatinate
定义concatinate
之前尝试拨打concatinate =
。只需向上移动声明,或者更好的是,将其移出任务定义之外。
您可能习惯使用JavaScript的function concatinate
语法,该语法会自动将函数移动到范围的顶部。 CoffeeScript编译为concatinate = function
语法,主要是因为function cocatinate
语法在不同的JS运行时(特别是IE)中表现不一致。因此,CoffeeScript函数只是遵循普通的变量赋值规则。