Gulpfile конец задачи с двумя различными операциями - PullRequest
0 голосов
/ 29 мая 2018

Мне не хватает воображения на этот счет.Моя цель - извлечь объект json, чтобы я мог запустить строку замены для всех файлов, которые я хочу перевести. Я просмотрел множество библиотек перевода, но этот способ - лучший, который я могу придумать для своего использования.В любом случае, моя проблема здесь в том, что как только я получил свой объект json, мне нужно запустить все файлы, и когда это будет сделано, завершить задачу 'trad'.Я провел некоторое исследование и перепробовал много вещей, но есть кое-что, что я скучаю, что-то, чего я не понял, о хорошем способе сделать это?Пожалуйста, помогите!

    gulp.task('trad', gulp.series( 'createTradFile', 'copyBeforeTrad',  function( done ) {
    var data = require('gulp-data');
    var path = require('path');
    var fs = require('fs');
    var replace2 = require('gulp-string-replace');
    var transObj = null;

    var translateAll = function()
    {
        var files = gulp.src(['fr/**/*.html', 'fr/**/*.js']);

        for (var k in transObj)
        {
            if (transObj[k].ID)
            {
             console.log("TRAD " + transObj[k].ID + " TO " + transObj[k].LANG1);

                files.pipe(replace2(new RegExp('\\+' + transObj[k].ID + '\\+', 'g'),
                                    transObj[k].LANG1,
                                    {'logs': {'enabled': true}}))
                .pipe(chmod(755));
            }
        }
        files.pipe(gulp.dest("fr"))
             .on('end', done);
    };

    gulp.src('distTemp/wording.json')
                .pipe(data(function(file) {
                    transObj = JSON.parse( fs.readFileSync('distTemp/' + path.basename(file.path)));
                    console.log("TRAD first part OK");
                    translateAll();
                 })); 
   }));

Так что этот код будет переведен так, как я хочу, но задача не заканчивается:

[16:38:34] The following tasks did not complete: trad, <anonymous>
[16:38:34] Did you forget to signal async completion?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Я не уверен, что понимаю вопрос на 100%, поэтому я возьму DVD, но говорю о чем-то вроде gulp-run-sequence ?

Вы можете сделать всечто-то вроде задач, таких как это

var gulp = require('gulp');
//webp images for optimization on some browsers
const webp = require('gulp-webp');
//responsive images!
var responsive = require('gulp-responsive-images');
//gulp delete for cleaning
var del = require('del');
//run sequence to make sure each gulp command completes in the right order.
var runSequence = require('run-sequence');
// =======================================================================// 
// !                Default and bulk tasks                                //        
// =======================================================================//  
//default runs when the user types 'gulp' into CLI
//first clean is ran, then webp, then the rest are ran async.
//If you want something ran after, you can add something like 'example'
gulp.task('default',function(callback){
    runSequence('clean','webp',['responsive-jpg','responsive-webp','copy-data','copy-sw'],'example'),callback
});
// =======================================================================// 
//                  Images and fonts                                      //        
// =======================================================================//  
gulp.task('responsive-jpg',function(){
    gulp.src('src/images/*')
    .pipe(responsive({
        '*.jpg':[
        {width:1600, suffix: '_large_1x', quality:40},
        {width:800, suffix: '_medium_1x', quality:70},
        {width:550, suffix: '_small_1x', quality:100}
    ]
    }))
    .pipe(gulp.dest('build/images'));
});
gulp.task('responsive-webp',function(){
    gulp.src('src/images/*')
    .pipe(responsive({
        '*.webp':[
        {width:1600, suffix: '_large_1x', quality:40},
        {width:800, suffix: '_medium_1x', quality:70},
        {width:550, suffix: '_small_1x', quality:80}
    ]
    }))
    .pipe(gulp.dest('build/images'));
});
gulp.task('webp', () =>
    gulp.src('src/images/*.jpg')
        .pipe(webp())
        .pipe(gulp.dest('src/images'))
);
gulp.task('copy-data', function () {
    gulp.src('./src/data/*.json')
        .pipe(gulp.dest('./build/data'));
});
gulp.task('copy-sw', function () {
    gulp.src('./src/sw.js')
        .pipe(gulp.dest('./build/'));
});

В моем примере я очищаю старые файлы, затем конвертирую любые изображения, которые необходимо преобразовать в webp, затем асинхронизирую задачи, которые можно запускать вместе.Вы можете сделать это в любом порядке.Затем можно создать задачу gulp, которая даже указывает на две задачи последовательности прогона gulp, чтобы удвоить эффективность.

0 голосов
/ 30 мая 2018

Итак, после небольшого исследования я нашел это (почти дрянное) решение, которое делает свое дело (пожалуйста, ответьте, если у вас есть лучшее решение)

var transObj = null;

gulp.task("retrieveTradObject", function(){
var data = require('gulp-data');
var path = require('path');
var fs = require('fs');

return gulp.src('distTemp/wording.json')
            .pipe(data(function(file) {
                transObj = JSON.parse( fs.readFileSync('distTemp/' + path.basename(file.path)));
                console.log("TRAD first part OK");
             }));
});

gulp.task('trad', gulp.series( 'createTradFile', 'copyBeforeTrad', 'retrieveTradObject',  function( done ) {

var replace2 = require('gulp-string-replace');

var files = gulp.src(['fr/**/*.html', 'fr/**/*.js']);

for (var k in transObj)
{
    if (transObj[k].ID)
    {
     console.log("TRAD " + transObj[k].ID + " TO " + transObj[k].LANG1);

        files = files.pipe(replace2(new RegExp('\\+' + transObj[k].ID + '\\+', 'g'),
                            transObj[k].LANG1,
                            {'logs': {'enabled': true}}))
        .pipe(chmod(755));
    }
}
files.pipe(gulp.dest("fr"));
return files;
}));

Так что основная идея здесь состояла в том, чтобы отделитьдва обещания в задачу (в основном для лучшего понимания кода на потом), а затем сделать файлы = files.pipe (...), что объясняется здесь: Как создать повторяющуюся трубу в gulp?

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...