【发布时间】:2022-08-11 15:33:54
【问题描述】:
我有一个带有一些子生成器的 yeoman 生成器。
我知道我可以在调用composeWith(...). 时将选项从父生成器传递给子生成器
但是我怎样才能传递我从提示中得到的答案呢?在调用 composeWith 时不可用。
例如,我在生成器中提示输入应用程序名称,并希望将其作为选项提供给所有子生成器?
我有一个带有一些子生成器的 yeoman 生成器。
我知道我可以在调用composeWith(...). 时将选项从父生成器传递给子生成器
但是我怎样才能传递我从提示中得到的答案呢?在调用 composeWith 时不可用。
例如,我在生成器中提示输入应用程序名称,并希望将其作为选项提供给所有子生成器?
哦,在相关问题中发现我可以在提示后调用子生成器,而不是初始化方法(如在相当过时的教程中)
【讨论】:
一种方法是使用built-in config。
在“父”生成器中:
configuring(){
this.log('Saving configuration in .yo-rc.json')
const answers = this.answers.answers()
for(const key in answers){
this.config.set(key, answers[key])
}
this.config.save()
}
在“子”生成器中,填充模板:
const templateData = {
...this.config.getAll(),
...
}
this.fs.copyTpl(
this.templatePath(),
this.destinationPath(),
templateData
)
这应该足够简单,可以根据您的用例进行更改,例如,您可能希望在子生成器中使用this.config.get(something)。
请注意,这将不起作用不同的发电机;仅在生成器与其自己的子生成器:
.yo-rc.json 文件是一个 JSON 文件,其中存储了来自多个生成器的配置对象。每个生成器配置都有命名空间,以确保生成器之间不会发生命名冲突。
这也意味着每个生成器配置都是沙盒的,并且只能在子生成器之间共享。您不能使用存储 API 在不同的生成器之间共享配置。在调用期间使用选项和参数在不同的生成器之间共享数据。
【讨论】: