2016-08-22 2 views
0

У меня проблема с задачами глотки (а) синхронно. Следующий мой файл с глотком. В принципе, я хочу сначала очистить каталог, а затем скопировать/создать некоторые файлы в новый каталог. Проблема заключается в состоянии гонки. Мне нужно выполнить clean и , затем выполнить все остальное (внутри задачи build).gulp tasks race condition

В настоящее время выполнение либо завершается, как ожидалось, либо не выполняется, поскольку каталог ENOENT не существует из-за состояния гонки.

var gulp = require('gulp'); 
var concat = require('gulp-concat'); 
var clean = require('gulp-clean'); 
var cleanCSS = require('gulp-clean-css'); 

var cfg = { 
    js: { 
    vendor: [ 
     './node_modules/angular/angular.min.js', 
     './node_modules/angular-translate/dist/angular-translate.min.js', 
     './node_modules/angular-bootstrap/ui-bootstrap.min.js', 
     './node_modules/angular-bootstrap/ui-bootstrap-tpls.min.js' 
    ], 
    app: './app/js/*' 
    }, 
    css: { 
    vendor: [ 
     './node_modules/bootstrap/dist/css/bootstrap.css', 
     './node_modules/font-awesome/css/font-awesome.css' 
    ], 
    app: './app/css/*' 
    } 
}; 

gulp.task('clean', function() { 
    return gulp.src('./dist', {read: false}) 
    .pipe(clean()); 
}); 

gulp.task('vendor-js', function() { 
    return gulp.src(cfg.js.vendor) 
    .pipe(concat('vendor.js')) 
    .pipe(gulp.dest('./dist/')); 
}); 

gulp.task('app-js', function() { 
    return gulp.src(cfg.js.app) 
    .pipe(concat('app.js')) 
    .pipe(gulp.dest('./dist/')); 
}); 

gulp.task('vendor-css', function() { 
    return gulp.src(cfg.css.vendor) 
    .pipe(cleanCSS({compatibility: 'ie8'})) 
    .pipe(concat('vendor.css')) 
    .pipe(gulp.dest('./dist/')); 
}); 

gulp.task('app-css', function() { 
    return gulp.src(cfg.css.app) 
    .pipe(cleanCSS({compatibility: 'ie8'})) 
    .pipe(concat('app.css')) 
    .pipe(gulp.dest('./dist/')); 
}); 

gulp.task('fonts', function() { 
    gulp.src('./app/fonts/**/*') 
    .pipe(gulp.dest('./dist/fonts')); 

    gulp.src('./node_modules/font-awesome/fonts/**/*') 
    .pipe(gulp.dest('./dist/fonts')); 
}); 

gulp.task('build', [ 
    'clean', 
    'vendor-js', 
    'app-js', 
    'vendor-css', 
    'app-css', 
    'fonts' 
]); 

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

Какую версию глотком вы используете? –

+1

'gulp.task ('default', ['clean', 'build'])' и удалить его из задачи 'build' –

+4

Возможный дубликат [Как запускать задачи Gulp синхронно/один за другим] (http: //stackoverflow.com/questions/22824546/how-to-run-gulp-tasks-synchronously-one-after-the-other) –

ответ

0

На самом деле, поддержка Глотка для последовательных (синхронных) задач является немного дрянным, нужно сделать преодолевает, как если бы это было нестандартное требование к приложениям ...

Как clean задача было уже делает возвращение, работа была:

  • определить зависимость задачи по clean для каждой отдельной задачи, которая требует его
  • затем удалите clean из build

Окончательное решение:

var gulp = require('gulp'); 
var concat = require('gulp-concat'); 
var clean = require('gulp-clean'); 
var uglify = require('gulp-uglify'); 
var cleanCSS = require('gulp-clean-css'); 

var cfg = { 
    js: { 
    vendor: [ 
     './node_modules/angular/angular.min.js', 
     './node_modules/angular-translate/dist/angular-translate.min.js', 
     './node_modules/angular-bootstrap/ui-bootstrap.min.js', 
     './node_modules/angular-bootstrap/ui-bootstrap-tpls.min.js' 
    ], 
    app: './app/js/*' 
    }, 
    css: { 
    vendor: [ 
     './node_modules/bootstrap/dist/css/bootstrap.css', 
     './node_modules/font-awesome/css/font-awesome.css' 
    ], 
    app: './app/css/*' 
    }, 
    fonts: [ 
    './app/fonts/**/*', 
    './node_modules/font-awesome/fonts/**/*', 
    './node_modules/bootstrap/fonts/**/*' 
    ] 
}; 

gulp.task('clean', function() { 
    return gulp.src('./dist', {read: false}) 
    .pipe(clean()); 
}); 

gulp.task('vendor-js', ['clean'], function() { 
    return gulp.src(cfg.js.vendor) 
    .pipe(concat('vendor.js')) 
    .pipe(gulp.dest('./dist/'));}); 

gulp.task('app-js', ['clean'], function() { 
    return gulp.src(cfg.js.app) 
    .pipe(uglify('app.js')) 
    .pipe(gulp.dest('./dist/')); 
}); 

gulp.task('vendor-css', ['clean'], function() { 
    return gulp.src(cfg.css.vendor) 
    .pipe(cleanCSS({compatibility: 'ie8'})) 
    .pipe(concat('vendor.css')) 
    .pipe(gulp.dest('./dist/')); 
}); 

gulp.task('app-css', ['clean'], function() { 
    return gulp.src(cfg.css.app) 
    .pipe(cleanCSS({compatibility: 'ie8'})) 
    .pipe(concat('app.css')) 
    .pipe(gulp.dest('./dist/')); 
}); 

gulp.task('fonts', function() { 
    gulp.src(cfg.fonts) 
    .pipe(gulp.dest('./fonts')); 
}); 

gulp.task('build', [ 
    'vendor-js', 
    'app-js', 
    'vendor-css', 
    'app-css', 
    'fonts' 
]); 

gulp.task('default', ['build']); 
Смежные вопросы