组合性是一种将较小的部件组合在一起构成一件大事的方法。排序像Voltron®
Yeoman为生成器提供了多种方式来建立共同点。重写相同的功能没有任何意义,因此提供了一个API来在其他生成器中使用生成器。
在Yeoman中,可组合性可以通过两种方式启动:
- 生成器可以决定与另一个生成器(例如,generator-backbone使用generator-mocha)组合。
- 最终用户也可以发起合成(例如,Simon想要生成具有SASS和Rails的Backbone项目)。注意:最终用户发起的合成是计划的功能,目前不可用。
this.composeWith()
该composeWith
方法允许生成器与另一个生成器(或子生成器)并排运行。这样它就可以使用其他发生器的功能,而不必自己完成所有功能。
在编写时,不要忘记运行上下文和RunLoop。在给定的优先级组执行中,所有组合的生成器将执行该组中的功能。之后,这将重复下一组。生成器之间的执行与composeWith调用的顺序相同,请参阅执行示例。
API
composeWith
有两个参数。
generatorPath
- 指向要编写的生成器的完整路径(通常使用require.resolve())。options
- 包含选项的对象,一旦运行就传递给组合生成器。
与peerDependencies
生成器组合时:
1 | this.composeWith(require.resolve('generator-bootstrap/generators/app'), {preprocessor: 'sass'}); |
require.resolve()
返回Node.js加载提供的模块的路径。
注意:如果你需要传递arguments
到基于版本的生成器yeoman-generator
年龄大于1.0,你可以通过提供一个做到这一点Array
的options.arguments
关键。
即使它不是一种鼓励的做法,您也可以将生成器命名空间传递给composeWith。在这种情况下,Yeoman将尝试peerDependencies在最终用户系统上找到作为或全局安装的生成器。
1 | this.composeWith('backbone:route', {rjs: true}); |
执行示例
1 | // In my-generator/generators/turbo/index.js |
运行时yo my-generator
,这将导致:
1 | prompting - turbo |
您可以通过反转调用来更改函数调用顺序composeWith
请记住,您可以使用npm上提供的其他公共生成器进行组合。
对于可组合的更复杂的例子,检查出generator-generator,它由被generator-node。
依赖项或peerDependencies
npm允许三种类型的依赖项:
dependencies
安装在本地的生成器。它是控制所用依赖项版本的最佳选择。这是首选方案。peerDependencies
作为兄弟姐妹安装在生成器旁边。例如,如果generator-backbone声明generator-gruntfile为对等依赖项,则文件夹树将以这种方式显示:1
2├───generator-backbone/
└───generator-gruntfile/devDependencies
用于测试和开发实用程序。这不是必需的。
使用时peerDependencies
,请注意其他模块可能还需要所请求的模块。注意不要通过请求特定版本(或窄范围的版本)来创建版本冲突。Yeoman的建议peerDependencies
是始终要求更高或等于(> =)或任何(*)可用版本。例如:
1 | { |
注意:从npm @ 3开始,
peerDependencies
不再自动安装。要安装这些依赖项,必须手动安装它们:npm install generator-yourgenerator generator-gruntfile generator-bootstrap@">=1.0.0"