Использовать composeWith параметры в подгенераторе

Я собираю генератор Yeoman и не понимаю, как работает параметр options composeWith(). Моя цель - передать пользовательский ввод от основной генераторной подсказки к подгенераторам, и я думал, что это способ сделать это.

Мой основной генератор выглядит примерно так:

prompting: function () {
    var done = this.async();

    var prompts = [
      {
        type    : 'input',
        name    : 'name',
        message : 'What is the name of your project?',
        default : this.appname // Default to current folder name
      }
    ];

    this.prompt(prompts, function (answers) {

        this.composeWith('app:subgenerator', {
          options: {
            name: answers.name;
          }
        },
        {
          local: require.resolve('generator-angular/app')
        });
        done();
    }.bind(this)
  )
}

Я попытался в моем подгенераторе установить локальную переменную, используя аргументы в конструкторе (потому что я предположил, что где будут варианты):

module.exports = generators.Base.extend({
  constructor: function () {
    generators.Base.apply(this, arguments);
    this.foo = arguments.options.name;
  }
}

Но это не сработало. Я попробовал консоль регистрировать переменную аргументов, и она показывает, что параметры - это объект, но он кажется пустым.

Является ли это тем, как я могу передавать пользовательский ввод через генератор в другой, или есть ли другой способ сделать это?

Ответ 1

Ваш подгенератор должен быть написан так же, как вы пишете обычные ожидающие варианты.

module.exports = generators.Base.extend({
  constructor: function () {
    generators.Base.apply(this, arguments);

    this.option('name');
  },

  initializing: function () {
    console.log(this.options.name)
  }
}

Подробнее см. документацию по взаимодействию с пользователем.