2016-01-07 7 views
0

YEOMAN версия: 1.4.8 НПМ: 2.11.3 Node: 0.12.7Аргументы, передаваемые через composeWith не найден в составе генератора

Там в добавленное икота генератора вызывающего свой subgenerator, но это не слишком безумный, и эта часть работает отлично.

У меня есть это в моем родителя:

this.composeWith('mercury:component', { options: { 
    component: this.props.domain + 'Content', 
    domain: this.props.path + '/' 
}}) 

И это в моем компоненте индекса:

constructor: function() { 
    yeoman.generators.Base.apply(this, arguments); 
    this.argument('component', {type: String, required: true}); 
    this.argument('domain', {type: String}); 
}, 

Если я позвоню ртуть: компонент непосредственно и проверить arguments, я вижу арг командной строки в '0'.

{ '0': [ 'test', '.' ], 
    '1': { env: {things...} } } 

Когда он вызывается из родительского генератора, они являются свойствами «1».

{ '0': [], 
    '1': 
    { component: 'TestContent', 
    domain: 'src/domains/test/', 
    env: {things...} } } 

У этого есть грустное.

Error: Did not provide required argument component! 
at null.<anonymous> (/Users/zlandon/mercury/generator-mercury/node_modules/yeoman-generator/lib/base.js:359:33) 
at Array.forEach (native) 
at Base.checkRequiredArgs (/Users/zlandon/mercury/generator-mercury/node_modules/yeoman-generator/lib/base.js:355:19) 
at argument (/Users/zlandon/mercury/generator-mercury/node_modules/yeoman-generator/lib/base.js:321:8) 
at new module.exports.yeoman.generators.Base.extend.constructor (/Users/zlandon/mercury/generator-mercury/generators/component/index.js:11:10) 
at Environment.instantiate (/usr/local/lib/node_modules/yo/node_modules/yeoman-environment/lib/environment.js:297:10) 
at Environment.create (/usr/local/lib/node_modules/yo/node_modules/yeoman-environment/lib/environment.js:274:15) 
at composeWith (/Users/zlandon/mercury/generator-mercury/node_modules/yeoman-generator/lib/base.js:614:26) 
at module.exports.yeoman.generators.Base.extend.writing.app (/Users/zlandon/mercury/generator-mercury/generators/app/index.js:55:12) 
at /Users/zlandon/mercury/generator-mercury/node_modules/yeoman-generator/lib/base.js:421:16 

Я считаю, что у меня есть старая версия узла из-за внешних причин, но трассировки стека делает его чувствовать Yo-специфический в любом случае.

ответ

1

Обновление для YEOMAN-генератора 1,0

Вам необходимо пройти как аргументы и параметры таким же образом:

this.composeWith(require.resolve('generator-mercury/component'), { 
    optionName: 'my option', 
    argumentName: 'an argument' 
}); 

Для старшина-генератора 0.x

Существует разница между options и arguments. Вы хотите:

this.composeWith('mercury:component', { 
    args: [this.props.domain + 'Content', this.props.path + '/'] 
}) 
+0

args должен быть массивом, а не объектом, но это было направление, в котором мне нужно было идти. – Hupfen

+0

Правильно, я обновил ответ. –

0

Я использую версию старшина-генератора 3.10.8

Единственный способ, которым я могу передать аргументы subgenerator выглядит следующим образом:

this.composeWith('myGen:subGen', { 
    arguments: ['value-for-first-arg'] 
}); 

Именование аргументы в объект options или использование массива с именем args не работал для меня

 Смежные вопросы

  • Нет связанных вопросов^_^