我如何等待GULP4系列中的任务

时间:2019-04-10 12:27:44

标签: javascript node.js gulp

任务'svg:inject'中出现错误“找不到文件SVG”。

这是怎么回事:任务'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>

2 个答案:

答案 0 :(得分: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 :(得分:0)

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));
};