2015-03-03 111 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