You have a grunt watch config like this:
watch:{
deploy:{
files: ["app/**/*.js", "app/**/*.css", "app/**/*.jsp"],
tasks: ['copyto']
options: { livereload: true }
},
scss:{
files: ['app/**/*.scss'],
tasks: ['compass']
},
docs:{
files: ['app/**/*.md'],
tasks: ['markdown']
}
}
Say you want to watch for deploy
and scss
task during development and do docs
only when writing documents. But doing grunt watch
will watch for all targets. If you try to register:
grunt.registerTask('dev', ['watch:deploy', 'watch:scss']);
It will only run the first task as it is a livereload
.
The solution is to write a simple multi-task. First have this in your confg:
watchSome:{
dev: ['deploy', 'scss'],
docs: ['docs']
}
And have this multi-task registered
grunt.registerMultiTask('watchSome', 'watch for some targets', function(){
var originalWatchConfig = grunt.config('watch');
var newWatchConfig = {};
this.data.forEach(function(name){
newWatchconfig[name] = originalWatchConfig[name];
});
grunt.config('watch', newWatchConfig);
grunt.task.run('watch');
});
You can now do a grunt watchSome:dev
to watch only deploy
and scss
at the same time.