Я пытаюсь создать немного сложный рабочий процесс в gulp 4, по сути, я бы хотел запускать 5 задач одну за другой каждый раз, когда запускаю задачу gulp «по умолчанию» (см. Список задач ниже);но у меня возникли некоторые ошибки, если я запускаю их одну за другой вручную, все работает хорошо, но если я запускаю задачу «по умолчанию», кажется, что глоток сходит с ума и не завершает все задачи, он останавливается на задаче 4,но результат не имеет конкатов внутри, и полностью пропускает задачу 5, даже если в bash сказано «выполнено».Я думаю, что проблема заключается в времени выполнения.
Список задач:
1.Задача 1: вытащить поставщиков из "node_modules / vendor folder" в "src / vendors / pending" (я знаю, что нет необходимости удалять поставщиков, но у меня есть свои причины)
2,Задача 2: собрать и сжать все js внутри "src / vendors / pending" и вставить в "src / vendors / ready";Конкат имя результата: "vendors.min.js"
3.Задача 3: скомпилировать и сжать мой сценарий es6 и вставить его в "src / запросы / ожидающие";Результат компиляции имени: "main.min.js"
4.Задача 4: concat "vendors.min.js" и "main.min.js" и вставка в результат компиляции имени "src / request / ready": "frontend.min.js"
5.Задача 5: создать карту и вставить файл "frontend.min.js" в папку "assets / js"
задание по умолчанию:
gulp.task ('default ', gulp.series (' task1 ',' task2 ',' task3, 'task4', 'task5'));
Есть ли способ сделать задачу зависимой от другой и запустить только следующую задачуесли предыдущая задача закончилась?
Я попытался обернуть все задачи с помощью "функции setTimeout", и, кажется, работает, но мне это не очень нравится, я ищу что-то, что может запустить шагшаг за шагом.
Вот файл глотка:
var gulp = require( 'gulp' );
const { src, dest, task, watch, series, parallel } = require('gulp');
// JS related plugins
var concat = require( 'gulp-concat' );
var uglify = require( 'gulp-uglify' );
var babelify = require( 'babelify' );
var browserify = require( 'browserify' );
var source = require( 'vinyl-source-stream' );
var buffer = require( 'vinyl-buffer' );
var stripDebug = require( 'gulp-strip-debug' );
// Utility plugins
var rename = require( 'gulp-rename' );
var sourcemaps = require( 'gulp-sourcemaps' );
var notify = require( 'gulp-notify' );
var plumber = require( 'gulp-plumber' );
var options = require( 'gulp-options' );
var gulpif = require( 'gulp-if' );
// Browers related plugins
var browserSync = require( 'browser-sync' ).create();
// js
var jsFront = 'main.js';
var jsFiles = [ jsFront ];
// Tasks
function browser_sync() {
browserSync.init({
server: {
baseDir: './assets/'
}
});
}
function reload(done) {
browserSync.reload();
done();
}
function vendorsFront(done) {
gulp.src([
'./node_modules/jquery/dist/jquery.js',
'./node_modules/animejs/lib/anime.min.js',
])
.pipe(gulp.dest( './src/vendors/pending/frontend' ));
console.log(0);
done();
};
function vendorsFrontReady(done) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
gulp.src([
'./src/vendors/pending/frontend/**/*.js'
])
.pipe(concat('vendors.js'))
.pipe( rename( {
extname: '.min.js'
} ) )
.pipe( uglify() )
.pipe(gulp.dest( './src/vendors/ready/frontend' ));
console.log(1);
done();
}, 1000)
resolve();
});
};
function js(done) {
jsFiles.map( function( entry ) {
return browserify({
entries: ['./src/scripts/' + entry]
})
.transform( babelify, { presets: [ '@babel/preset-env' ] } )
.bundle()
.pipe( source( entry ) )
.pipe( rename( {
extname: '.min.js'
} ) )
.pipe( buffer() )
.pipe( gulpif( options.has( 'production' ), stripDebug() ) )
.pipe( uglify() )
.pipe( dest( './src/requests/pending' ) )
.pipe( browserSync.stream() );
});
console.log(2);
done();
};
function concatVendorScripts(done) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
return gulp.src([ './src/vendors/ready/frontend/**/*.js', './src/requests/pending/main.min.js' ])
.pipe( buffer() )
.pipe(concat('frontend.js'))
.pipe( rename( {
extname: '.min.js'
} ) )
.pipe( gulpif( options.has( 'production' ), stripDebug() ) )
.pipe( dest( './src/requests/ready' ) )
console.log(3);
done();
}, 4000)
resolve();
});
};
function moveJs(done) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
return gulp.src('./src/requests/ready/*')
.pipe(sourcemaps.init({loadMaps: true}))
.pipe( sourcemaps.write( '.' ) )
.pipe(gulp.dest('./assets/js/' ));
console.log(4);
done();
}, 5000)
resolve();
});
};
function triggerPlumber( src_file, dest_file ) {
return src( src_file )
.pipe( plumber() )
.pipe( dest( dest_file ) );
}
task("vendorsFront", vendorsFront);
task("vendorsFrontReady", vendorsFrontReady);
task("concatVendorScripts", concatVendorScripts);
task("moveJs", moveJs);
gulp.task('default', gulp.series('vendorsFront', 'js','vendorsFrontReady', 'concatVendorScripts', 'moveJs'));