2015-02-17 71 views
2

我有一個「默認」任務,我想在gulp繼續構建我的縮小CSS和JS之前清理文件夾。每個默認任務只需運行一次「乾淨」任務。但我有問題試圖獲取默認任務來引用真正的構建任務。 因此,這裏是我的gulpfile:在默認情況下引用兩個gulp任務

var gulp = require('gulp'); 

    // including our plugins 
    var clean = require('gulp-clean'); 
    var less = require('gulp-less'); 
    var util = require('gulp-util'); 
    var lsourcemaps = require('gulp-sourcemaps'); 
    var rename = require('gulp-rename'); 
    var filesize = require('gulp-filesize'); 
    var ugly = require('gulp-uglify'); 
    var path = require('path'); 
    var plumber = require('gulp-plumber'); 
    var minifyCSS = require('gulp-minify-css'); 
    var concat = require('gulp-concat'); 
    // DEFAULT TASK 
    gulp.task('default', ['clean'], function() { 
    .pipe(gulp.task('vendor')) 
    .pipe(gulp.task('css')) 
}); 
    // strips public folder for a build operation nice and clean ** obliterates! ** 
    gulp.task('clean', function() { 
     return gulp.src('public/**', {read: false}) 
     .pipe(clean()); 
    }); 
    // javascript vendor builds 
    gulp.task('vendor', function() { 
     return gulp.src(['bower_comps/angular/angular.js', 'bower_comps/angular-bootstrap/ui-bootstrap.js', 'bower_comps/angular-bootstrap/ui-bootstrap-tpls.js']) 
     //.pipe(filesize()) 
     .pipe(ugly()) 
     .pipe(concat('vendor.min.js')) 
     .pipe(gulp.dest('public/js')) 
    }); 
    // builds CSS 
    gulp.task('css', function() { 
     return gulp.src('bower_comps/bootstrap-less/less/bootstrap.less') 
     .pipe(lsourcemaps.init()) 
     .pipe(plumber({ 
      errorHandler: function(err) { 
       console.log(err); 
       this.emit('end') 
      } 
     })) 
     .pipe(less({ 
      paths: [path.join(__dirname, 'less', 'includes')] 
     })) 
     .pipe(minifyCSS()) 
     .pipe(rename('site.min.css')) 
     .pipe(lsourcemaps.write('./maps')) 
     .pipe(gulp.dest('public/css/')) 
     .pipe(filesize()) 
    }); 

因此,如何我要對這個錯誤的?每個單獨的任務都可以自行運行,只需要「gulp css」,「gulp vendor」。就在我將它們放入一個默認任務(主任務)時,帶着我的乾淨「先決條件」任務,遇到問題。

託尼

回答

7

嘗試這些爲你的任務:

gulp.task('clean', function() { 
    // Insert cleaning code here 
}); 

gulp.task('vendor', ['clean'], function() { 
    // Insert your 'vendor' code here 
}); 

gulp.task(‘css’, ['clean'], function() { 
    // insert your 'css' code here 
}); 

gulp.task('build', [‘vendor’, ‘css’]); 

gulp.task('default', ['build']); 

只有'clean'完成後,'vendor'和'css'纔會同時運行。儘管是'vendor'和'css'的先決條件,'clean'只會運行一次。

+0

謝謝你們。你們兩人都是一樣的。真棒。我一直在想,每次調用css或vendor時,'clean'都會運行。我今天學到了東西。 – 2015-02-18 15:55:08

1

,當你調用默認的任務的問題IST,吞掉隨機選擇任務的順序:

gulp.task('default', ['clean', 'move', 'scripts', 'css']); 

爲了解決這個問題,每個任務應該有相關性。例如,move任務應在清理任務之後執行。所以move TAKS應該是這樣的:

gulp.task('move', ['clean'], function() { //your code } 

更多的解釋:https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulptaskname-deps-fn

對不起我的英文不好:-)