Gruntjs просматривает разные папки и выполняет задачи
Мне было интересно, можно ли настроить задачу просмотра для просмотра двух разных папок и выполнить другую задачу в каждой папке. Например, всякий раз, когда что-то изменяется, /folder 1, тогда задача 1 должна выполняться, всякий раз, когда что-то изменяется в /folder 2, тогда задача 2. должна выполняться.
Структура папок имеет следующий вид:
корень
| -folder1
| -folder2
Ответы
Ответ 1
Смотреть ведет себя как многозадачность, поэтому да, вы можете настроить его для просмотра разных наборов файлов и выполнения различных задач.
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']);
Не тестировали, но он должен работать.
Ответ 2
Если вы хотите, чтобы задачи просмотра выполнялись одновременно. Существует отличное решение RobW здесь Как одновременно запускать две задачи для ворчания.
Я потратил некоторое время на решение, так что вот фрагмент из этого решения.
Динамическая запись объекта конфигурации в пользовательской задаче работает.
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');
});
Ответ 3
Лучшее и единственное работающее решение: 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
}
}
}
Затем вы используете фокус: источники или фокус: testu в качестве вашего удобства.
JM.