как мне дождаться задачи в СЕРИИ GULP4

#javascript #node.js #gulp

#javascript #node.js #глоток

Вопрос:

У меня ошибка «Не удалось найти файл SVG» в задаче «svg: inject».

Итак, что происходит: задача ‘svg: sprite’ генерирует файл sprite.svg. Затем в задаче «svg: inject» я хочу использовать этот sprite.svg для перемещения его в html. Но у меня ошибка ((

Есть ли у вас какие-либо идеи по поводу этого поведения и его решения?

 gulp.task('svg:sprite', (done) => {
    gulp.src('./resources/svg/sprite/*.svg')
        .pipe(svgstore())
        .pipe(dest('./resources/svg/'));
    done();
});

gulp.task('svg:inject', gulp.series('svg:sprite', (done) => {
    gulp.src('./resources/svg/sprite-svg.html')
        .pipe(injectSvg({
            base: './resources/svg/'
        }))
        .pipe(dest('./resources/_code/templates/'));
    done();
}));
  

sprite-svg.html файл:

 <div class="hide">
    <img src="sprite.svg">
</div>
  

Ответ №1:

Верните поток вместо использования обратного done вызова:

 gulp.task('svg:sprite', () =>
  gulp.src('./resources/svg/sprite/*.svg')
    .pipe(svgstore())
    .pipe(gulp.dest('./resources/svg/'))
);

gulp.task('svg:inject', gulp.series('svg:sprite', () =>
  gulp.src('./resources/svg/sprite-svg.html')
    .pipe(injectSvg({
        base: './resources/svg/'
    }))
    .pipe(gulp.dest('./resources/_code/templates/'))
));
  

Комментарии:

1. Спасибо! Но у меня есть еще один вопрос выше. Пожалуйста, помогите мне

Ответ №2:

TheDancingCode спасибо! Это помогает.

Но один вопрос: я пытаюсь использовать require для задач. И в этом случае я получаю сообщение об ошибке:

Следующие задачи не были завершены: svg: inject, svg: sprite
Вы забыли сообщить об асинхронном завершении?

Что не так?

Код:

 function getTask(task, path_src, path_dest) {
    return require('./tasks/'   task)(gulp, plugins, path_src, path_dest);
};

gulp.task('svg:sprite', () => {
    getTask('svg-sprite', CONFIG.src.svg_sprite, CONFIG.src.svg)
});

gulp.task('svg:inject', gulp.series('svg:sprite', () => {
    getTask('svg-inject', CONFIG.src.svg, CONFIG.src.html_templates)
}));
  

И пример модуля задачи (svg-sprite.js ):

 module.exports = function (gulp, plugins, path_src, path_dest) {
    gulp.src(path_src)
        .pipe(plugins.svgstore())
        .pipe(gulp.dest(path_dest));
};
  

Комментарии:

1. Еще раз добавьте return операторы перед getTask и gulp.src .

2. Спасибо. Это помогает. Почему оператор ‘return’ решил проблему?