2014-07-09 43 views
8

使用gulp.js我有三個任務(醜化,buildHTML,rmRevManifest)我想作爲父生成任務的一部分運行。代碼我有作品,除了它並行運行任務(即訂單不保留)。我如何才能完成任務,並在上一次完成前不運行下一個任務?Gulp.js運行的任務,在特定的順序阻斷

I.E.現在的執行順序回來爲:

[11:50:17] gulp-notify: [Gulp notification] Deleted 'rev-manifest.json'. 
[11:50:17] gulp-notify: [Gulp notification] Created 'build/index.html'. 
[11:50:17] gulp-notify: [Gulp notification] Uglified JavaScript. 

的順序問題,並醜化應該首先運行,然後buildHTML,終於rmRevManifest

gulp.task('build', ['uglify', 'buildHTML', 'rmRevManifest'], function(cb) { 
}); 

gulp.task('uglify', function(cb) { 
    gulp.src('client/js/source/**/*.js') 
     .pipe(concat('app')) 
     .pipe(ngmin()) 
     .pipe(uglify()) 
     .pipe(rev()) 
     .pipe(rename({ 
      extname: ".min.js" 
     })) 
     .pipe(gulp.dest('client/js')) 
     .pipe(rev.manifest()) 
     .pipe(gulp.dest('client/js')) 
     .pipe(notify('Uglified JavaScript.')); 
}); 

gulp.task('buildHTML', function(cb) { 
    gulp.src('client/views/index.html') 
     .pipe(replace(/app\-[a-fA-F0-9]\.min\.js/, 'app-.min.js')) 
     .pipe(gulp.dest('client/build')) 
     .pipe(notify('Created \'build/index.html\'.')); 
}); 

gulp.task('rmRevManifest', function(cb) { 
    gulp.src('client/js/rev-manifest.json', { read: false }) 
     .pipe(rimraf()) 
     .pipe(notify('Deleted \'rev-manifest.json\'.')); 
}); 

回答

6

真正的答案:您需要設置需要其他任務先運行的依賴關係。

簡單的回答:有一個npm模塊可以完成您所需要的所謂run sequence

+1

這是有限的。例如,如果您有構建腳本的腳本任務,並且在某些情況下您首先要執行乾淨的任務。在gulp中你必須使'clean'成爲腳本的依賴。這具有清潔成爲強制性的效果。 – Henry

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

gulp.task('build', function(cb) { 
    runSequence('uglify', 
       'buildHTML', 
       'rmRevManifest', 
       cb); 
}); 

    gulp.task('uglify', function() { 
     return gulp.src('client/js/source/**/*.js') 
       .pipe(concat('app')) 
       .pipe(ngmin()) 
       .pipe(uglify()) 
       .pipe(rev()) 
       .pipe(rename({ 
        extname: ".min.js" 
       })) 
       .pipe(gulp.dest('client/js')) 
       .pipe(rev.manifest()) 
       .pipe(gulp.dest('client/js')); 
    }); 

    gulp.task('buildHTML', function() { 
     var revManifest = require('./client/js/rev-manifest.json'); 

     return gulp.src('client/views/index.html') 
       .pipe(replace(/app\-[a-fA-F0-9]\.min\.js/, 'app-' + revManifest.app + '.min.js')) 
       .pipe(gulp.dest('client/build')); 
    }); 

    gulp.task('rmRevManifest', function() { 
     return gulp.src('client/js/rev-manifest.json', { read: false }) 
       .pipe(rimraf()); 
    }); 
8

在Gulp 3.0中設置依賴關係的示例。在這個例子中3個任務取決於應首先執行「乾淨」的任務:

// Include Gulp 
var gulp = require('gulp'); 
var task = {}; 

// Clean up 
gulp.task('clean', function() { .. }); 

// HTML pages 
gulp.task('pages', task.pages = function() { ... }); 
gulp.task('pages:clean', ['clean'], task.pages); 

// CSS style sheets 
gulp.task('styles', task.styles = function() { ... }); 
gulp.task('styles:clean', ['clean'], task.styles); 

// JavaScript files 
gulp.task('scripts', task.scripts = function() { ... }); 
gulp.task('scripts:clean', ['clean'], task.scripts); 

// Bundling and optimization 
gulp.task('build', ['pages:clean', 'styles:clean', 'scripts:clean']); 

隨着run-sequence那就等於:

// Include Gulp & utilities 
var gulp = require('gulp'); 
var runSequence = require('run-sequence'); 

// Clean up 
gulp.task('clean', function() { .. }); 

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

// CSS style sheets 
gulp.task('styles', function() { ... }); 

// JavaScript files 
gulp.task('scripts', function() { ... }); 

// Bundling and optimization 
gulp.task('build', ['clean'], function (cb) { 
    runSequence(['pages', 'styles', 'scripts'], cb); 
}); 

附::在即將到來的Gulp 4.0中,依賴系統會好得多。