Вызов методов из задачи в 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 просто подчиняются обычным правилам назначения переменных.

Другие вопросы по тегам