Последовательность выполнения не выполняет задачи gulp по порядку
У меня есть 3 задачи в моем файле Gulp, которые должны выполняться в следующем порядке:
clean
(удаляет все в/dist
папка)copy
(копирует несколько файлов в/dist
папка)replace
(заменяет некоторые строки в некоторых файлах в/dist
папка)
Я прочитал все остальные посты, я пробовал "последовательность выполнения", но она не работает, так как задача "заменить" не выполняется в последнюю очередь. Я смущен использованием "обратного вызова". Запуск задач по отдельности работает нормально.
var gulp = require('gulp');
var runSequence = require('run-sequence');
gulp.task('runEverything', function(callback) {
runSequence('clean',
'copy',
'replace',
callback);
});
gulp.task('clean', function () {
return del(
'dist/**/*'
);
});
gulp.task('copy', function() {
gulp.src('node_modules/bootstrap/dist/**/*')
.pipe(gulp.dest('dist/vendor'))
//...
return gulp.src(['index.html', '404.html', '.htaccess'])
.pipe(gulp.dest('dist/'));
});
gulp.task('replace', function(){
gulp.src(['dist/index.php', 'dist/info.php'])
.pipe(replace('fakedomain.com', 'realdomain.com'))
.pipe(gulp.dest('dist'));
return gulp.src(['dist/config.php'])
.pipe(replace('foo', 'bar'))
.pipe(gulp.dest('dist'));
});
Полный пример использования этих 3 задач будет принята с благодарностью. Спасибо.
1 ответ
run-sequence
Документация может сказать следующее о задачах с асинхронными операциями:
убедитесь, что они либо возвращают поток или обещание, либо обрабатывают обратный вызов
Оба ваши copy
а также replace
задачи имеют более одного потока. Вы должны вернуть все потоки, а не только последний. Gulp не будет ничего знать о других потоках, если вы не вернете их, и поэтому не будете ждать их завершения.
Поскольку вы можете когда-либо возвращать только один поток, вы должны объединить потоки [вставьте сюда ссылку на Ghostbusters]. Это даст вам один объединенный поток, который вы сможете вернуть из своей задачи.
Вот как это сделать, используя merge-stream
пакет:
var merge = require('merge-stream');
gulp.task('copy', function() {
var stream1 = gulp.src('node_modules/bootstrap/dist/**/*')
.pipe(gulp.dest('dist/vendor'))
//...
var stream2 = gulp.src(['index.html', '404.html', '.htaccess'])
.pipe(gulp.dest('dist/'));
return merge(stream1, stream2);
});
gulp.task('replace', function(){
var stream1 = gulp.src(['dist/index.php', 'dist/info.php'])
.pipe(replace('fakedomain.com', 'realdomain.com'))
.pipe(gulp.dest('dist'));
var stream2 = gulp.src(['dist/config.php'])
.pipe(replace('foo', 'bar'))
.pipe(gulp.dest('dist'));
return merge(stream1, stream2);
});