等待 this.fs.copyTpl 在 Yeoman Generator 上完成

Wait for this.fs.copyTpl to complete on Yeoman Generator

我的 Yeoman 生成器中有以下代码:

_appTemplate(src, dest, addToHG, scope) {
  let done = this.async();
  if (src === null || dest === null) {
    return;
  }

  let fullPathSrc = this.templatePath(src);
  let fullPathDest = this.destinationPath(path.join('src', dest));
  this.fs.copyTpl(fullPathSrc, fullPathDest, scope);

  if (addToHG) {
    this.log('Adding:' + fullPathDest + ' to HG now...');
    this.spawnCommand('hg', ['add', fullPathDest]).on('close', done);
  } else {
    done();
  }
}

但我看到尝试将文件添加到 HG (mercurial) 的尝试发生得太快,文件不存在。如何等到 copyTpl 完成?

我尝试了以下方法,但都没有成功:

this.fs.copyTpl(fullPathSrc, fullPathDest, scope).then(() => {});

this.fs.copyTpl(fullPathSrc, fullPathDest, scope).on('end', () => {});

但是似乎支持下层模式,我找不到 this.fs.copyTpl() 的实际文档。

提前致谢!

当然,在发布我的问题几分钟后,我找到了 this.fs.copyTpl() 的文档。原来它是一个 "in memory" 文件系统包,直到稍后才将文件提交到磁盘。

https://github.com/SBoudrias/mem-fs-editor#copyfrom-to-options

这是一个可行的解决方案,但我不知道它是否理想。我愿意接受这里的建议。

_appTemplate(src, dest, addToHG, scope) {
  let done = this.async();
  if (src === null || dest === null) {
    return;
  }

  let fullPathSrc = this.templatePath(src);
  let fullPathDest = this.destinationPath(path.join('src', dest));

  this.fs.copyTpl(fullPathSrc, fullPathDest, scope);
  this.fs.commit([], () => {
    if (addToHG) {
      this.log('Adding:' + fullPathDest + ' to HG now...');
      this.spawnCommand('hg', ['add', fullPathDest]).on('close', done);
    } else {
      done();
    }
  });
}