在gulp中,如何观看一组过滤后的文件,然后调用任务?

时间:2014-06-17 08:04:35

标签: gulp gulp-watch

我正在尝试使用Gulp来监视我的源代码更改然后编译,lint并重新加载我的应用程序。

根据我的理解,gulp.watch不允许过滤资源,因此如果更新spec / test文件,则会重新加载所有内容。例如:

jsSrc = ['!./app/**/*spec.js', './app/**/*.js']    

gulp.task('watch', function() {
  gulp.watch(jsSrc, ['scripts', 'jsLint', 'reload']);
});

根据我的理解,gulp-watch允许过滤资源,但是如何触发其他任务。

gulp.task('watch', function() {
  gulp.src(jsSrc)
    .pipe(require('gulp-watch')())
    // how do I call tasks?  ['scripts', 'jsLint', 'reload']
});

2 个答案:

答案 0 :(得分:0)

gulp.task('scripts', function(event) { 
    //event.path (changed file)
    //... 
});

gulp.task('reload', function() { //... });

gulp.task('watch', function() {
    gulp.watch(jsSrc, 
       //array of tasks to be executed when a file of jsSrc change
       ['scripts', 'reload']
    );
});

答案 1 :(得分:0)

你没有。 gulp-watch是一个发送所有文件但永不结束的流。然后,对于每个更改的文件,它再次发出它。您不能(直接)使用它来触发任务。

因为它永远不会发出end,而且因为你得到的单个文件“脱离了上下文”这个插件比gulp.watch更难处理,它只会再次触发整个任务。 / p>

不是说,我通常把它设置为

gulp = require("gulp");

gulp.task('a', function() { console.log('a'); });
gulp.task('b', function() { console.log('b'); });

gulp.task('default', ['a','b'], function(){
    gulp.watch(['**/*.js','!**/foo.js'], ['a']);
    gulp.watch(['**/*.css','!**/foo.css'], ['b']);
});

这样你忽略'foo.js'但是对于所有其他.js文件运行'a',对b来说是相同的。

请参阅https://github.com/isaacs/minimatch了解glob语法