Yeoman 使用 args 通过代码调用生成器

Yeoman invoke generator by code with args

我有带子生成器的 yeoman 生成器。 我需要通过代码调用子生成器,我使用下面的代码,我看到子生成器被调用,我在终端中得到了问题。

文档: 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 可能吗?

你可以这样做:

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

sub 子生成器中,您可以通过 this.options.app.

找到值

要禁用问题提示,在 Question Object 中定义 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;

    });
}