2017-01-18 2 views
0

Я пытаюсь создать генератор йома, чтобы ускорить процесс мой, , но есть некоторые проблемы, связанные с этим.Генератор Yeoman не работает по назначению

  • Вход имени этого значение true, вместо значения при условии
  • Если не все значения при условии, я получаю подтвердить, но после того, что ничего не происходит (только тогда, когда все аргументы предоставляются)
  • в scaffoldFolders не создает папки (EDIT: получил, что работа)

делает кто-нибудь знает какие-либо (или даже лучше: все) решения моей проблемы?

вот index.js я использую:

'use strict'; 
var Generator = require('yeoman-generator'); 
var util = require('util') 
var OptionOrPrompt = require('yeoman-option-or-prompt'); 
var mkdirp = require('mkdirp'); 
var _ = require('underscore.string'); 

var GlatGenerator = class extends Generator { 

    constructor(args, opts) { 
    // Calling the super constructor is important so our generator is correctly set up 
    super(args, opts); 
    this._optionOrPrompt = OptionOrPrompt; 
    this.props = {}; 
    } 

    prompting() { 
    var done = this.async(); 
    // Instead of calling prompt, call _optionOrPrompt to allow parameters to be passed as command line or composeWith options. 
    this._optionOrPrompt([{ 
     type: 'input', 
     name: 'name', 
     message: 'Your component name', 
     default: 'hoogwerker', 
     store: true 
    }, { 
     type: 'confirm', 
     name: 'model', 
     message: 'Should we create a model for you?', 
     default: true, 
     store: true 
    }, { 
     type: 'confirm', 
     name: 'service', 
     message: 'Should we create a service for you?', 
     default: true, 
     store: true 
    }], function (answers) { 
     this.props.componentName = answers.name 
     this.props.createModel = answers.model 
     this.props.createService = answers.service 
     console.log("**********************"); 
     console.log("***" + (JSON.stringify(answers))); 
     console.log("**********************"); 
     done(); 
    }.bind(this)); 
    } 

    scaffoldFolders() { 
    console.log('scaffoldFolders'); 
    var slugify = _.slugify(this.props.componentName); 
    var classify = _.classify(this.props.componentName); 
    var lowerName = _.decapitalize(_.classify(this.props.componentName)); 

    mkdirp("src/components/" + lowerName); 
    mkdirp("src/components/" + lowerName + "/components"); 
    if (this.props.createModel) { 
     mkdirp("src/components/" + lowerName + "/models"); 
    } 
    if (this.props.createModel) { 
     mkdirp("src/components/" + lowerName + "/services"); 
    } 
    } 

    copyMainFiles() { 
    console.log('copyMainFiles'); 
    var slugify = _.slugify(this.props.componentName); 
    var classify = _.classify(this.props.componentName); 
    var lowerName = _.decapitalize(classify); 
    var dash = _.dasherize(lowerName); 

    var context = { 
     component_name: slugify, 
     component_name_camel: classify, 
     component_name_lower: lowerName, 
     component_name_dash: dash, 
    }; 

    var base = "src/components/" + lowerName + "/"; 

    this.fs.copyTpl(
     this.templatePath('base-files/_component.html'), 
     this.destinationPath(base + lowerName + ".component.html"), 
     context 
    ); 

    this.fs.copyTpl(
     this.templatePath('base-files/_component.scss'), 
     this.destinationPath(base + lowerName + ".component.scss"), 
     context 
    ); 

    this.fs.copyTpl(
     this.templatePath('base-files/_component.ts'), 
     this.destinationPath(base + lowerName + ".component.ts"), 
     context 
    ); 

    this.fs.copyTpl(
     this.templatePath('base-files/_module.ts'), 
     this.destinationPath(base + lowerName + ".module.ts"), 
     context 
    ); 

    this.fs.copyTpl(
     this.templatePath('base-files/_routes.ts'), 
     this.destinationPath(base + lowerName + ".routes.ts"), 
     context 
    ); 

    if (this.props.createModel) { 
     this.fs.copyTpl(
     this.templatePath('model/_model.ts'), 
     this.destinationPath(base + "/models/" + classify + ".ts"), 
     context 
    ); 
    } 

    if (this.props.createService) { 
     this.fs.copyTpl(
     this.templatePath('service/_service.ts'), 
     this.destinationPath(base + "/services/" + lowerName + ".service.ts"), 
     context 
    ); 
    } 
    } 
}; 

module.exports = GlatGenerator; 


// module.exports = base.extend({ 
//  initializing:() => {}, 
//  prompting: () => {}, 
//  configuring: () => {}, 
//  default: () => {}, 
//  writing: () => {}, 
//  conflicts: () => {}, 
//  install: () => {}, 
//  end: () => {} 
// }); 

и используется команда:

yo glat:component --name="hoogwerker" --model --service 

ответ

1

--name в настоящее время анализируется как логическое значение. Вам нужно указать тип как строку. this.option('name', {type: String})

Для второго момента, это трудно помочь вам, не видя _optionOrPrompt функции. Но это похоже на ошибку на вашей стороне, функция не вызывает обратный вызов, когда все значения передаются как параметры.

+0

_optionOrPrompt из плагина (https://github.com/artefact-group/yeoman-option-or-prompt) – Kiwi

+0

@ Kiwi выглядит так, как будто этот плагин имеет ошибки. Вы должны открыть отчет об ошибке. –

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