Глоток 4 Выполнить задание один за другим - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь создать немного сложный рабочий процесс в 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'));

1 Ответ

0 голосов
/ 31 января 2019

вы можете использовать Gulp 4 серии, пожалуйста, перейдите по ссылке ниже: https://fettblog.eu/gulp-4-parallel-and-series/

...