Ссылка на две задачи gulp по умолчанию

У меня есть задача gulp «по умолчанию», в которой я хочу очистить папку, прежде чем gulp продолжит сборку моего минимизированного CSS и JS. Эта «чистая» задача должна запускаться только один раз для каждой задачи по умолчанию. Но у меня возникают проблемы с попыткой заставить задачу по умолчанию ссылаться на реальные задачи сборки. Итак, вот мой глоток:

    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". Просто когда я помещаю их в задачу по умолчанию (основную задачу) с «предварительной» задачей моей очистки, я сталкиваюсь с проблемами.

Тони


person Energetic Pixels    schedule 17.02.2015    source источник


Ответы (2)


Попробуйте это для своих задач:

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». «clean» запускается только один раз, несмотря на то, что он является обязательным условием как для «vendor», так и для «css».

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

Проблема заключается в том, что когда вы вызываете задачу по умолчанию, gulp случайным образом выбирает порядок задачи:

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

Для решения этой проблемы каждая задача должна иметь зависимости. Например, задача move должна выполняться после задачи очистки. Итак, move таксы должны выглядеть так:

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

дополнительные пояснения: https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulptaskname-deps-fn

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

person YvesHendseth    schedule 18.02.2015