Создание наблюдателя за файлами для coffeescript с помощью grunt

Я пытаюсь использовать подключаемый модуль grunt watch (https://www.npmjs.org/package/grunt-contrib-watch) для создания пользовательских файловых наблюдателей. Я пишу сценарии компиляции для файлов coffeescript, которые будут компилироваться при их изменении. Вот базовая конфигурация.

grunt.initConfig(
    pkg: grunt.file.readJSON 'package.json'
    watch:
      cofee_files:
        files: ['client/**/*.coffee'],
        tasks: ['start'],
        options:
          spawn: false,

grunt.registerTask( 'start', 'starting coffee compilation', (filepath)->
    console.log(filepath)

Мне нужно получить путь к файлу в качестве входных данных, чтобы иметь возможность выполнить компиляцию файла и сохранить вывод в каталоге относительно пути к исходному файлу coffeescript. В коде, который я написал выше, значение пути к файлу передано как неопределенное, что я вижу в выводе журнала. Пожалуйста, помогите мне получить путь к измененному файлу, чтобы я мог соответствующим образом динамически настроить компилятор coffeescript.


person EternallyCurious    schedule 28.05.2014    source источник


Ответы (1)


вам нужно зарегистрировать обработчик события наблюдения. там вы получите путь к файлу, который вы можете использовать для настройки своей кофейной задачи:

(код не тестировался, но я думаю, вы поняли идею)

path = require 'path'

grunt.initConfig(
  pkg: grunt.file.readJSON 'package.json'

  watch:
    cofee_files:
      files: ['client/**/*.coffee'],
      tasks: ['start'],
      options:
        spawn: false,
  coffee:
    compile: 
      files: []


  grunt.event.on 'watch', (action, filepath) ->
    # modify your coffee task here
    newCoffeeConfig = 
      cwd: path.dirname(filepath)
      src: path.basename(filepath)
      dest: path.dirname(filepath)
      ext. '.js' 

    grunt.config.get('coffee:compile.files').push newCoffeeConfig
    grunt.task.run 'coffee:compile'
person hereandnow78    schedule 28.05.2014
comment
Извиняюсь. У меня раньше был ложноположительный результат. Код создает ошибку: Fatal error: Cannot call method 'push' of undefined. Я также пытался скомпилировать как grunt.config.get('coffee:compile'), но это тоже не работает. Не могли бы вы предоставить синтаксически точный код? - person EternallyCurious; 29.05.2014
comment
Идентификация grunt.event.on 'watch' была неправильной, я исправил ее. более того, SO — это доска, которая поможет вам понять вещи, но не делать вашу работу! должен быть какой-то перенос, сделанный самостоятельно... - person hereandnow78; 31.05.2014