使用Gulp4在系列中运行多个生成的并行任务不起作用吗?

问题描述

我正在使用gulp4为几个cms构建一个白色标签插件

因为每个cms都不相同,所以每个cms都有一个gulpfile和一个调用所有gulpfile的全局gulpfile。他们还呼吁应该建立的每个品牌。

可以提供应该作为cli参数构建的cms和品牌。

因此,我想基于cli参数为每个品牌动态生成构建管道。我正在这样做:

function build() {
    return brands.map(brand => () => {
        // start empty pipeline to pass through to cms builds
        const pipeLine = src('--------',{allowEmpty: true,read: false});
        cmsTypes.forEach(cmsType => {
            const task = require(`./src/cms/${cmsType}/gulpfile`).build;
            task(pipeLine,brand)
                .pipe(dest(`dist/${brand}/${cmsType}/artifacts/`))
        })
        return pipeLine;
    })
}

如您所见,pipeLine已启动并传递到cms特定的gulp文件build()函数的结果是一系列调用特定内部版本的匿名函数。然后可以将此数组放入parallel(...build())中,以使生成的构建函数并行运行。到目前为止效果很好。

但是,我也想压缩构建工件。我的第一个操作虽然是将zip函数集成到构建管道本身中,但是存在一个问题:subTask gulp文件可能会生成重复文件(即具有相同文件名的文件)。我希望它们被最新添加文件覆盖。使用dist写入文件时通常可以使用,但是压缩功能允许重复,因此我们需要在压缩之前将它们写入磁盘。

为此,我做了一个类似的压缩功能

function zipArtifacts() {
    return brands.map(brand => () => {
        // start empty pipeline to pass through to cms builds
        const pipeLine = src('--------',read: false});
        cmsTypes.forEach(cmsType => {
            pipeLine
                .pipe(src(`dist/${brand}/${cmsType}/artifacts/**/*`))
                .pipe(zip(`my-plugin.zip`))
                .pipe(dest(`dist/${brand}/${cmsType}/`))
        })
        return pipeLine;
    })
}

当我自己执行它时,它已经足够好工作了,但是当我将其放入构建链中时,它不会产生任何结果,尽管我可以看到这些功能是通过控制台日志调用的。

exports.clean = clean;
exports.build = series(clean,parallel(...build()),parallel(...zipArtifacts()));
exports.zip = parallel(...zipArtifacts());

你知道这里可能是什么问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)