2015-02-17 3 views
2

У меня есть задача gulp 'default', где я хочу очистить папку, прежде чем 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». Его просто, когда я помещал их в задание по умолчанию (главная задача) с заданием «pre-requisite» моего чистого, что у меня возникают проблемы.

Тони

ответ

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']); 

«vendor» и «css» будут запускаться одновременно только после завершения «очистки». «clean» будет работать только один раз, несмотря на то, что он является обязательным условием для «vendor» и «css».

+0

Спасибо, ребята. Вы оба вели к тому же. Потрясающие. Я все время думал, что «чистый» будет запускаться каждый раз, когда вызывается либо css, либо поставщик. Сегодня я чему-то научился. –

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

извините за мой плохой английский :-)