问题描述
因为每个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 (将#修改为@)