我有一个使用子发生器(GenB)的自动生成器(GenA)。 GenA将在我的应用程序结构中创建一个public/
文件夹,我希望GenB从该文件夹运行并将其所有文件放在/public
内(主要是因为我希望能够通过Bower安装依赖项) GENB)。
GenA的相关部分:
prompting: function() {
this.prompt(prompts, function(ans) {
this.composeWith('GenB', {
options: {
application_name: this.application_name
}
},
{
local: require.resolve('path/to/GenB')
});
done();
}.bind(this))
};
GenB的相关部分:
this.bowConfig = {
"directory": "public/bower_components"
};
this.fs.writeJSON('.bowerrc', this.bowConfig);
this.bow = {
"name": this.name,
"version": "1.0.0",
"description": "foo",
"dependencies": { ... },
"devDependencies": { ... }
};
this.fs.writeJSON('bower.json', this.bow);
// and a little later...
install: function() {
this.bowerInstall() // this looks for bower.json in the current directory
// ...
}
如果我将设置更改为我写入public/bower.json
,那么当yeoman调用this.bowerInstall
时,它不会看到我的bower.json
文件,因此不会安装我的依赖项。
如果我尝试更改所有GenB的根路径,请执行以下操作:
constructor: function () {
generators.Base.apply(this, arguments);
this.destinationRoot('public/')
}
然后,所有生成的文件(包括来自父GenA的文件)都是根据更改的destinationRoot生成的。
是否有另一个选项来指定放置通过subgenerated&生成的文件的位置。 composeWith()?应该以不同的方式处理在与父生成器不同的目录中生成吗?
感谢任何帮助。
答案 0 :(得分:1)
您可以spawn指定cwd的命令。您可以手动生成凉亭过程,指定一个cwd并且它可以工作。
我不是100%确定它会起作用,但也许这也会有效:
this.bowerInstall(null, {cwd: 'public/'});