Yeoman,在composeWith

时间:2018-08-18 18:09:35

标签: async-await yeoman

我是Java语言的新手,我看到的是,这里可能存在异步代码问题:

我有一个函数可以在主生成器中调用composewith。在该函数中调用composeWith之前,如果需要,我使用yosay()。

我的问题是所有yoSay函数在任何composeWith之前被调用。

这是我的代码: 编写和_composeWith函数

async writing() {
this.log('Before subGenerator 1 ======================================');
if (this.answers.licence) {
  await this._ComposeWith(constants.license);
}
this.log('After subGenerator 1 ======================================');

this.log('Before subGenerator 2 ======================================');
if (this.answers.dockerized) {
  await this._ComposeWith(constants.docker, {
    options: {
      packageManager: this.answers.packageManager,
      destinationRoot: this._generateRoot()
    }
  });
}
this.log('After subGenerator 2 ======================================');

}

    async _ComposeWith(configObject, args = undefined) {
       if (configObject.displayYeoman) {
         this.log('YEOMAN ======================================');
         //Have Yeoman asking the user some more questions
         this.log(
           yosay(
             `I will now ask you some questions about ${chalk.red(
               configObject.context
             )} !`
           )
         );
       }
       this.log('Calling composeWith ======================================');
       this.composeWith(require.resolve(configObject.generator), args);
    }

除了在_ComposeWith中打印yosay之外,其他所有操作均符合预期。

输出示例:

Before subGenerator 1 ======================================
YEOMAN ======================================

     _-----_     ╭──────────────────────────╮
    |       |    │  I will now ask you some │
    |--(o)--|    │    questions about the   │
   `---------´   │         license !        │
    ( _´U`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

Calling composeWith ======================================
After subGenerator 1 ======================================
Before subGenerator 2 ======================================
YEOMAN ======================================

     _-----_
    |       |    ╭──────────────────────────╮
    |--(o)--|    │  I will now ask you some │
   `---------´   │ questions about docker ! │
    ( _´U`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

Calling composeWith ======================================
After subGenerator 2 ======================================
? What's your name: John Doe
? Your email (optional): john.doe@example.com
? Your website (optional):
? Which license do you want to use? Apache 2.0
? Which version of node will you run in the container?  8
? Whick package manager will you use?  npm
   create LICENSE
   create Dockerfile
   create .dockerignore

任何帮助/解释我的错误将不胜感激! :)

1 个答案:

答案 0 :(得分:0)

我认为您遇到run loop的问题。

Yeoman按特定顺序安排某些任务,这适用于组合生成器。我建议reading the documentation,看看是否有帮助。

  

如果只有一个生成器,那么按顺序运行任务就可以了。   但是,一旦开始将生成器组合在一起,这还不够。

     

这就是Yeoman使用运行循环的原因。

     

运行循环是具有优先级支持的队列系统。我们使用   分组队列模块处理运行循环。

     

优先级在您的代码中定义为特殊的原型方法名称。   当方法名称与优先级名称相同时,运行循环将推送   该方法放入此特殊队列中。如果方法名称不匹配   优先级,它将被推送到默认组中。