0

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

据我了解 gulp.watch 不允许过滤资源,因此如果我更新了规范/测试文件,所有内容都会重新加载。例如:

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']
});
4

2 回答 2

0

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

因为它从不发出end,而且因为你得到单个文件“脱离上下文”,所以这个插件比 更难使用gulp.watch,它只会再次触发整个任务。

比说,我通常设置它像

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 也是如此。

有关glob 语法,请参阅https://github.com/isaacs/minimatch

于 2014-06-18T09:45:00.263 回答
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']
    );
});
于 2014-06-17T23:58:58.213 回答