Вызов методов из задачи в Cakefile
Я устанавливаю Cakefile, который будет компилировать и минимизировать мой CoffeeScript и минимизировать мои ванильные библиотеки.
Я создал разные задачи для каждого случая (был ли это кофейный файл или нет), но я хочу объединить их в одну задачу.
Проблема, с которой я сталкиваюсь - это вызов метода из задачи; Я могу вызвать метод без проблем при некоторых обстоятельствах, но в противном случае я получаю
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 ответ
Проблема в том, что вы пытаетесь позвонить concatinate
прежде чем вы определите concatinate
с линией concatinate =
, Просто переместите декларацию или, что еще лучше, переместите ее за пределы определения задачи.
Вы, вероятно, привыкли к JavaScript function concatinate
синтаксис, который автоматически перемещает функцию в верхнюю часть области. CoffeeScript компилируется в concatinate = function
синтаксис вместо, главным образом потому, что function cocatinate
синтаксис ведет себя непоследовательно в разных средах выполнения JS (особенно IE). Таким образом, функции CoffeeScript просто подчиняются обычным правилам назначения переменных.