Yeoman:你能从模板中调用一个方法吗?

时间:2017-07-28 20:32:29

标签: yeoman yeoman-generator

您可以在Yeoman模板中调用方法,代替通常注入templateData属性的位置吗?

我希望在模板中多次生成随机guid。在我的_Product.xml模板文件中,我有: -

<someNode value="<%= randomGuid %>">
<someNode value="<%= randomGuid %>">
<someNode value="<%= randomGuid %>">
<someNode value="<%= randomGuid %>">
<someNode value="<%= randomGuid %>">

然后在我的自动生成器中,我有: -

_buildTemplateData() {
  this.templatedata.randomGuid = uuid.v4();
}

writeToDisk() {
  this.fs.copyTpl(this.templatePath('_Product.xml'), this.destinationPath('Product.xml'), this.templatedata);
}

我希望得到: -

<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/>
<someNode value="7F7184CF-23A7-4383-B5BB-E3A383BC6A0A"/>
<someNode value="5B7A26C1-A449-4B35-94E3-D214C62CEAD7"/>
<someNode value="641D7EC0-AFB1-4646-8B52-5DC71B8FFC50"/>
<someNode value="CEB94BA1-D487-4838-A354-FAFB4D8B188A"/>

但我得到了: -

<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/>
<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/>
<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/>
<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/>
<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/>

我知道我可以创建一堆Guids作为templateData的属性,并将它们全部传入,单独引用每个,但我想避免这种情况,因为我不需要在产品之外重用guid。 xml文件,我想尽可能减少代码。 我也希望用函数调用来做类似的事情....但这是在这里发布的更基本的例子。

有什么想法吗? 感谢

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。将函数作为模板上下文传递:

precision@n

然后在模板中调用它:

this.fs.copyTpl(a, b, {
  getUuid: () => uuid.v4()
});