自定义约曼发电机可以't覆盖文件

Custom Yeoman Generator can't overwrite files

本文关键字:覆盖 文件 发电机 自定义      更新时间:2023-09-26

我正在尝试创建一个简单的生成器来标准化节点项目的创建。在我的生成器中,我调用copyTpl,如:

generator.fs.copyTpl(
  sourcePath,
  destinationPath
  context,
  //ignore ES6 constructs in our templates
  {
    interpolate: /<%=(['s'S]+?)%>/g
  }
);

只要我的目标目录中不存在任何文件,这就非常有效。不幸的是,如果一个文件存在,并且我选择覆盖它,我会得到以下错误:

Error: no writecb in Transform class
at afterTransform (/Users/gerrard00/projects/generator-mine/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:95:33)
at TransformState.afterTransform (/Users/gerrard00/projects/generator-mine/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:79:12)
at Object.callback (/Users/gerrard00/projects/generator-mine/node_modules/yeoman-generator/lib/base.js:787:7)
at /Users/gerrard00/projects/generator-mine/node_modules/yeoman-generator/lib/util/conflicter.js:79:18
at Conflicter.<anonymous> (/Users/gerrard00/projects/generator-mine/node_modules/yeoman-generator/lib/util/conflicter.js:193:12)
at PromptUI.onCompletion (/usr/local/opt/nvm/versions/node/v5.0.0/lib/node_modules/yo/node_modules/inquirer/lib/ui/prompt.js:57:10)
at AnonymousObserver.Rx.AnonymousObserver.AnonymousObserver.completed (/usr/local/opt/nvm/versions/node/v5.0.0/lib/node_modules/yo/node_modules/rx-lite/rx.lite.js:1550:12)
at AnonymousObserver.Rx.internals.AbstractObserver.AbstractObserver.onCompleted (/usr/local/opt/nvm/versions/node/v5.0.0/lib/node_modules/yo/node_modules/rx-lite/rx.lite.js:1489:14)
at Subject.Rx.Subject.addProperties.onCompleted (/usr/local/opt/nvm/versions/node/v5.0.0/lib/node_modules/yo/node_modules/rx-lite/rx.lite.js:5871:19)
at Subject.tryCatcher (/usr/local/opt/nvm/versions/node/v5.0.0/lib/node_modules/yo/node_modules/rx-lite/rx.lite.js:63:31)

这意味着我的生成器只能在空文件夹中工作。我已经重读了大约二十遍"创建生成器"文档,但我不知道我遗漏了什么。我需要向生成器中添加什么来防止此错误?

更新:尽管有错误,文件实际上还是被覆盖了。

事实证明,问题在于我的代码使用nodewalk包异步遍历目录。调用方法使用了generator async方法,但同步调用了done回调。我修改了它,在walk-end事件处理程序中调用done回调,错误就消失了。