Gruntjs просматривают разные папки и выполняют задачи

Мне было интересно, можно ли настроить задачу просмотра для просмотра двух разных папок и выполнения разных задач в каждой папке. Например, всякий раз, когда что-то изменяется в /folder1, должна выполняться задача1, всякий раз, когда что-то изменяется в /folder2, должна выполняться задача2.

Структура папок имеет следующий вид: корень |-папка1 |-папка2


person markovuksanovic    schedule 12.12.2012    source источник


Ответы (3)


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

watch:{
  set1: {
    files: [ 'folder1/**/*' ],  //<- this watch all files (even sub-folders)
    tasks: ['task1']
  },
  set2: {
    files: ['folder2/**/*'],
    tasks: ['task2']
  }
},

Затем вы можете запустить одну задачу наблюдения или обе.

grunt.registerTask('watchSet1', ['watch:set1']);
grunt.registerTask('watchSet1And2', ['watch:set1', 'watch:set2']);      

Не проверял, но должно работать.

person jaime    schedule 12.12.2012
comment
Итак, watchSet1and2 будет выполнен, когда обе задачи закончатся? - person chchrist; 12.12.2012
comment
Нет, это пример того, как запустить обе задачи. Вы вызовете grunt watchSet1And2 из командной строки, и обе часы запустятся. - person jaime; 12.12.2012
comment
Спасибо, сработало нормально. Я также заметил, что можно запускать задачу «просто смотреть» (хрюкающие часы). Он будет запускать правильные задачи, если файлы будут изменены в любой из отслеживаемых папок. - person markovuksanovic; 12.12.2012
comment
У меня есть отличный ответ на этот вопрос здесь: target" title="grunt js смотрите в разных каталогах и выполняйте задачи с разными целями"> stackoverflow.com/questions/15691804/ - person Dan Kanze; 29.03.2013
comment
Это вызывает некоторые проблемы... в моем случае watch:set1 работает бесконечно, а watch:set2 никогда не запускается... Правильный ответ можно найти здесь: stackoverflow.com/questions/17585385/ - person Jaime; 29.01.2014

Если вы хотите, чтобы задачи наблюдения выполнялись одновременно. Здесь есть отличное решение от RobW Как запустить две задачи grunt watch одновременно

Я потратил некоторое время на поиск решения, поэтому вот фрагмент этого решения.

Динамическая запись объекта конфигурации в пользовательской задаче работает.

grunt.registerTask('watch:test', function() {
  // Configuration for watch:test tasks.
  var config = {
    options: {
      interrupt: true
    },
    unit: {
      files: [
        'test/unit/**/*.spec.coffee'
      ],
      tasks: ['karma:unit']
    },
    integration: {
      files: [
        'test/integration/**/*.rb',
        '.tmp/scripts/**/*.js'
      ],
      tasks: ['exec:rspec']
    }
  };

  grunt.config('watch', config);
  grunt.task.run('watch');
});
person Vishak Partha    schedule 16.06.2014

Лучшее и единственное работающее решение есть: https://npmjs.org/package/grunt-focus Добавьте этот плагин, а затем:

focus: {
            sources: {
                include: ['js', 'html', 'css', 'grunt']
            },
            testu: {
                include: ['js', 'html', 'css', 'testu', 'grunt']
            },
            testi: {
                include: ['js', 'html', 'css', 'testu', 'testi', 'grunt']
            }
        },
        watch: {
            js: {
                files: paths.js,
                tasks: ['jshint'],
                options: {
                    livereload: true
                }
            },
            html: {
                files: paths.html,
                options: {
                    livereload: true
                }
            },
            css: {
                files: paths.css,
                tasks: ['csslint'],
                options: {
                    livereload: true
                }
            },
            testu: {
                files: ['test/**/*.js', 'test/**/*.css'],
                tasks: ['mochaTest'],
                options: {}
            },
            testi: {
                files: ['test/**/*.js', 'test/**/*.css'],
                tasks: ['exec:cleanTestDB', 'protractor_webdriver', 'protractor'],
                options: {}
            },
            grunt: {
                files: ['Gruntfile.js', 'server/config/env/*.js'],
                options: {
                    reload: true
                }
            }
        }

Затем вы используете focus:sources или focus:testu как вам удобнее.

JM.

person jmcollin92    schedule 09.05.2014