2016-12-17 54 views
3

運行一飲而盡任務我在咕嘟咕嘟文件3個任務必須按以下順序運行:運行序列不爲了

  1. clean(在/dist文件夾中刪除的所有內容)
  2. copy(複印件多個文件到文件夾/dist
  3. replace(替換一些文件中的某些字符串在/dist文件夾)

我讀過所有其他帖子,我試過「運行序列」,但它不工作,因爲「替換」任務沒有最後運行。我對使用「回調」感到困惑。單獨運行任務可以正常工作。

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

gulp.task('runEverything', function(callback) { 
    runSequence('clean', 
       'copy', 
       'replace', 
       callback); 
}); 

gulp.task('clean', function() { 
    return del(
     'dist/**/*' 
    ); 
}); 

gulp.task('copy', function() { 
    gulp.src('node_modules/bootstrap/dist/**/*') 
     .pipe(gulp.dest('dist/vendor')) 
    //... 
    return gulp.src(['index.html', '404.html', '.htaccess']) 
     .pipe(gulp.dest('dist/')); 
}); 

gulp.task('replace', function(){ 
    gulp.src(['dist/index.php', 'dist/info.php']) 
     .pipe(replace('fakedomain.com', 'realdomain.com')) 
     .pipe(gulp.dest('dist')); 

    return gulp.src(['dist/config.php']) 
     .pipe(replace('foo', 'bar')) 
     .pipe(gulp.dest('dist')); 
}); 

使用這3個任務的完整示例將不勝感激。謝謝。

回答

9

run-sequence documentation有以下談談與異步操作的任務:

確保他們要麼返回流或承諾,或者處理回調

無論您copyreplace任務有不止一個流。您必須返回所有流,而不僅僅是最後一個。如果你不返回它們,Gulp不會知道其他溪流的任何信息,因此不會等待它們完成。

既然你只能返回一個流,你必須合併流[在這裏插入Ghostbusters引用]。這會給你一個合併的流,你可以從你的任務中返回。

下面介紹如何使用做了merge-stream package

var merge = require('merge-stream'); 

gulp.task('copy', function() { 
    var stream1 = gulp.src('node_modules/bootstrap/dist/**/*') 
     .pipe(gulp.dest('dist/vendor')) 
    //... 
    var stream2 = gulp.src(['index.html', '404.html', '.htaccess']) 
     .pipe(gulp.dest('dist/')); 

    return merge(stream1, stream2); 
}); 

gulp.task('replace', function(){ 
    var stream1 = gulp.src(['dist/index.php', 'dist/info.php']) 
     .pipe(replace('fakedomain.com', 'realdomain.com')) 
     .pipe(gulp.dest('dist')); 

    var stream2 = gulp.src(['dist/config.php']) 
     .pipe(replace('foo', 'bar')) 
     .pipe(gulp.dest('dist')); 

    return merge(stream1, stream2); 
}); 
+0

感謝您抽出時間來幫助,斯文。除了'run-sequence'以外,使用'merge-stream'似乎效果很好。 –