Yeoman вызывает генератор по коду с аргументами - PullRequest
3 голосов
/ 17 июня 2020

У меня есть йоменский генератор с дополнительным генератором. Мне нужно вызвать вспомогательный генератор через код , и я использую приведенный ниже код, который работает, я вижу, что вспомогательный генератор вызывается, и я получил вопрос в терминале.

docs: https://yeoman.io/authoring/integrating-yeoman.html

var yeoman = require('yeoman-environment');
var env = yeoman.createEnv();


env.lookup(function () {
    env.run('main:sub',err => {
        console.log('done' ,err);
    });
});

У вспомогательного генератора есть только один вопрос

 prompting() {

    const prompts = [
      {
        name: "app",
        message: "which app to generate?",
        type: "input",
        default: this.props.app,
      },
    ];

...

Я хочу позвонить ему тихо, что означает передачу значения для app вопроса через код, а не с помощью терминала , и я пробую это, что не работает (я вижу вопрос в терминале)

env.lookup(function () {
    env.run('main:sub',{"app":"nodejs"}, err => {
        console.log('done' ,err);
    });
});

а также пробовал то, что не работает

env.lookup(function () {
    env.run('main:sub --app nodejs', err => {
        console.log('done' ,err);
    });
});

Как я могу это сделать? передать значения с помощью кода (возможно, как это сделано в модульном тесте, но этот код не является модульным тестом ... когда терминал не вызывается) Из документации я не уверен, как передать значения https://yeoman.io/authoring/integrating-yeoman.html

Я тоже нашел это, но не совсем понял, как использовать его для передачи параметра генератору http://yeoman.github.io/environment/Environment.html# .lookupGenerator возможно ли это?

1 Ответ

1 голос
/ 18 июня 2020

Вы можете просто сделать:

env.lookup(function () {
    env.run('main:sub',{"app":"nodejs"}, err => {
        console.log('done' ,err);
    });
});

и внутри подгенератора sub вы можете найти значение через this.options.app.

Чтобы отключить подсказку вопроса, определенную when внутри объекта вопроса вот так:

prompting() {

    const prompts = [
      {
        name: "app",
        message: "which app to generate?",
        type: "input",
        default: this.props.app,
        when: !this.options.app
      },
    ];

    . . .

    return this.prompt(prompts).then((props) => {
      this.props = props;

      this.props.app = this.options.app || this.props.app;

    });
}
...