2015-03-03 112 views
4

每次我跑一饮而尽,我看到这条消息gulp.run() has been deprecated. Use task dependencies or gulp.watch task triggering instead.咕嘟咕嘟运行替代

示例代码:

var watch = require('gulp-watch'); 
watch(['public/**/*.js','!public/**/*.min.js'],function(){ 
    gulp.run('compressjs'); 
    gulp.run('bs-reload'); 
}); 

如何避免使用gulp.run()与一饮而尽,观看?

回答

2

gulp.run()已被弃用,因为人们使用它作为拐杖。你正在使用它作为拐杖!

我不确定你为什么使用gulp-watch,内置的gulp.watch会更适合你的使用目的。看看.watch的文档:https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulpwatchglob--opts-tasks-or-gulpwatchglob--opts-cb

这是你应该写的。 明白,为什么你正在使用,而不是仅仅将其复制它:

gulp.watch(['public/**/*.js','!public/**/*.min.js'], ['compressjs', 'bs-reload']) 
+3

谢谢您的回答。我明白,当使用'gulp。手表“,它可以像你的答案一样完成。但我正在使用'gulp-watch'。我使用'gulp-watch'的原因是因为'gulp.watch'不能监视新的或删除的文件,因为我的经验和发现在这里:http://stackoverflow.com/questions/22391527/gulps-gulp-watch-not -triggered-for-new-or-deleted-files那么,我怎么能不在这里使用'gulp-watch'这个'gulp.run'? – user1995781 2015-03-03 12:44:38

+0

虽然这打破了。它忽略了第一个依赖关系中的依赖关系。 – 2016-07-23 11:47:31

2

你总是可以只使用普通的老JavaScript函数。从我读过的内容来看,这被认为是一种更加“咕噜咕噜”的做事方式。

我遇到了类似的情况一次,基本符合这样的事情解决了它:

var watch = require('gulp-watch'); 
watch(['public/**/*.js','!public/**/*.min.js'], function(){ 
    compress(); 
    bsReload(); 
}); 

,然后将这些功能周围的什么会是你原来一饮而尽任务的胆量基本上都是包装器:

var compress = function() { 
    return gulp.src("stuff/**") 
      .pipe(gulp-compress()) 
      .pipe(gulp.dest("./the_end/"); 
}; 

它很容易陷入这样的想法,即人们必须为所有事情使用吞吐任务,否则你“做错了”,但如果你需要使用这样的事情去做。

如果你也想用相同的功能一饮而尽任务则掀起了这样的事情:

gulp.task("compress", function() { 
    return compress(); 
}); 

,并使用相同的代码时,如果你需要它在其他地方,你仍然可以利用一饮而尽任务依赖条件的。

3

您不应该使用run。这里是一个替代(解决你的答案的一部分),而不是你需要做什么:

gulp 
    .start('default') 
    .once('task_stop', function(){ 
     //do other stuff. 
    }); 

如果你真的必须触发一个特设的任务,但实际上可以使用运行...您可以使用.start与任务名称,并附加到task_stop处理程序以在任务完成时触发某些内容。编写吞噬任务的测试时,这很好,但事实就是如此。但是在日常使用中,这是一个反模式。

通常情况下,您可以构建较小的任务并将其组合起来。这是正确的方法。看到这一点:

var gulp = require('gulp'), 
    runSequence = require('run-sequence'); 

function a(){ 
    //gulpstuff 
} 
function b(){ 
    //gulpstuff 
} 

function d(callback){ 
    runSequence('a', 'b', callback) 
} 

gulp 
    .task('a', a) // gulp a -runs a 
    .task('b', b) // gulp b runs b 
    .task('c', ['a', 'b']) //gulp c runs a and b at the same time 
    .task('d', d); //gulp d runs a, then b. 

基本上如果c或d是一个手表的任务,你会获得射击已经注册的小口喝相同的任务目标,而不.run