如何解决使用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 举报,一经查实,本站将立刻删除。