Yeoman composeWith:更改目录?

时间:2015-08-06 17:50:27

标签: bower yeoman yeoman-generator

我有一个使用子发生器(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()?应该以不同的方式处理在与父生成器不同的目录中生成吗?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以spawn指定cwd的命令。您可以手动生成凉亭过程,指定一个cwd并且它可以工作。

我不是100%确定它会起作用,但也许这也会有效:

this.bowerInstall(null, {cwd: 'public/'});