gulp 4任务没有完成(但它应该),我怎么能强迫gulp等到它完成?

时间:2018-03-20 22:01:48

标签: gulp timeout task

我正在学习使用gulp 4并遇到麻烦:如果必须处理许多文件夹(我的电脑上超过22个),下面的代码不能正常完成。我认为这是由于任务完成的时间限制,因为文件夹数量较少,它可以正常工作。我已经听说过--timeout,但它在gulp 4中看起来过时了(gulp --help没有显示那个标志),而且我没有找到任何其他方法来延长任务执行时间。

function parse_blocks (done) {
  BEM_tree = {};
  gulp.src(app.blocks)
  .pipe(flatmap((stream, file) => {
    let block = file.stem;
    BEM_tree[block]={};
    if(!fs.existsSync(file.path+"/"+block+".pug")) {
      let files = fs.readdirSync(file.path);
      for (let i in files) {
        let f = files[i].match(/^[\w\s-]*\.pug$/);
        if(f!==null && f[0]!==(block+".pug"))
          fs.renameSync(file.path+"/"+f[0],file.path+"/"+block+".pug");
      }
    }
    if(!fs.existsSync(file.path+"/"+block+".styl")) {
      let files = fs.readdirSync(file.path);
      for (let i in files) {
        let f = files[i].match(/^[\w\s-]*\.styl$/);
        if(f!==null && f[0]!==(block+".styl"))
          fs.renameSync(file.path+"/"+f[0],file.path+"/"+block+".styl");
      }
    }
    fs.ensureFileSync(file.path+"/"+block+".pug");
    fs.ensureFileSync(file.path+"/"+block+".styl");
    return stream;
  }))
  .on("finish", ()=>{done();});
}

我正在努力寻找答案,但一无所获(可能使用了错误的关键词)。如果你想在你的电脑上试一下,你可以在https://github.com/e-g1gor/gulp-task-not-finish-trouble下载工作目录,但不要忘记先运行npm install。有没有办法迫使gulp等到任务完成而不会错误?请指教。谢谢你的帮助!

UPD: 与代码相同的行为

function parse_blocks (done) {
  BEM_tree = {};
  gulp.src(app.blocks)
  .pipe(flatmap((stream, file) => {
    return stream;
  }))
  .on("finish", ()=>{done();});
}

所以它可能是flatmap插件的东西,仍在试图找出正在发生的事情

1 个答案:

答案 0 :(得分:0)

嗯,它绝对是flatmap插件的东西,因为

function parse_blocks (done) {
  setTimeout(done,35000);
}

在35秒后正常结束。所以我想,最初的问题不再是实际问题了,而我只是误用了gulp.src,因为我可以用glob做些什么。我不确定它对某人有用,如果不是只是删除问题。 THX