我使用gulp已有几年了,用于源代码编译和其他与传统Web开发相关的事情。但是现在我将把它用于其他用途。
我将使用gulp为我的游戏生成世界地图块。块基本上只是项目数组。理想情况下,这就是我想象的世界块生成任务的方式:
task('genChunk', ()=>{
return ... // from where this chain should start? how do I loop it?
.pipe(putGrass)
.pipe(putTrees)
.pipe(putRivers)
.pipe(putCorners)
.pipe(putChunkNumber)
.pipe(wrapMeta) // wrap generated chunk info with some meta data
.pipe(source(`${chunk.id}.json`) // give a name to file
.pipe(dest(`${worldsPath}/${config.name}`) // save file in dest dir
})
我喜欢通过管道链放置块生成过程的想法。
但是,好像我可以在互联网上找到的每一项吞咽任务,都是从gulp.src
开始的,这不是我的情况。因此,主要问题-gulp是否适用于不需要任何文件输入的任务,例如这样的任务?如何启动管道链?如何循环播放?
当前,这是我实现生成块的任务的方式:
const genChunk = ({worldHeight, worldWidth, name}) => function genChunk(cb){
Array(worldWidth*worldHeight).fill(null).map((k, i)=>{
const chunk = {
id: i+1,
items: compose(
putGrass,
putTrees,
putRivers,
putCorners,
putChunkNumber,
)([])
}
const json = JSON.stringify(chunk, null, 2)
fs.writeFileSync(`${worldsPath}/${name}/chunks/${chunk.id}.json`, json, 'utf8');
})
cb()
}
但是,这种方式除了task
本身之外,不使用任何吞咽功能。
我在这里需要吞咽吗?
将gulp用于此类任务可能有什么好处?
我是否应该实施后端API来生成世界大块,而不是使用gulp任务?