запуск задачи grunt с динамическим именем с помощью grunt-contrib-watch

Есть ли способ динамически указать задачу для запуска на основе измененного файла?

Другими словами:

watch: {
  exec: {
    files: [html/*.html],
    tasks: ['exec:my_exec_task:THE_FILE_THAT_CHANGED']
  }
}

Я могу поймать события просмотра, но я не могу запускать задачи из обратного вызова, поскольку он «делает это неправильно».

grunt.event.on('watch', function(action, filepath, target) {
  if (target === 'exec') {
    grunt.task.run('exec:my_exec_task:' + filepath); /* this doesn't work */
    grunt.config('filepath', filepath); /* and neither does this, it's undefined in my exec task */
  }
});

По крайней мере, так говорится в документации: https://github.com/gruntjs/grunt-contrib-watch#using-the-watch-event

Есть идеи?


person Dave    schedule 24.04.2014    source источник


Ответы (1)


Согласно документам

Событие watch не предназначено для замены стандартного API Grunt для настройки и запуска задач. Если вы пытаетесь запускать задачи из события наблюдения, вы, скорее всего, делаете это неправильно. Пожалуйста, прочтите настройку задач.

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

grunt.initConfig({
  watch: {
    scripts: {
      files: ['app/*.js'],
      tasks: ['jshint:one'],
      options: {
        spawn: false,
      },
    },
  },
  jshint: {
    one: {src: ""},
  },
});

и при просмотре конфигурации изменения события "на лету"

grunt.event.on('watch', function(action, filepath) {
  grunt.config('jshint.one.src', filepath);
});

после применения конфигурации этот раздел watch запустит задачу jahint:one.

person alex naumov    schedule 25.03.2015