【问题标题】:Create yeoman generator with API's calls使用 API 调用创建 yeoman 生成器
【发布时间】:2020-09-16 16:17:49
【问题描述】:

我已经创建了一个运行良好的 Yeoman 生成器,现在我需要用另外两个问题来扩展它。

这个问题我已经有了

async prompting() {
  const prompts = [
    {
      name: "appName",
      message: "Project name: ",
      type: "input",
      default: this.props!.appName,
      validate(input: string) {
        const appName = validateAppName(input);
        return !appName[1] ? appName[0] : true;
      },
    },
    {
      type: "list",
      name: "tech",
      message: "Which tech?”,
      default: “cloud”,
      choices: [{ name: “cloud”}, { name: “onPrem” }}],
    },
    },
  ];

现在我需要添加其他问题,例如您要创建项目的命名空间

{
  type: “list”,
  name: "namespace",
  suggestOnly: false,
  message: "which namespace: ",
  source: Namespace.searchNS,
  when: () => !isEmpty(this.namespace!.namespaceInstances),
  validate(val: boolean) {
    return val
      ? true
      : "choose a namespace where services are provisioned ";
  },
},

并且用户应该选择一个命名空间(这里的技巧是我需要运行一些逻辑,即休息调用以取回命名空间列表),对于这个命名空间,我需要添加另一个问题。即对于用户选择的命名空间,我需要提供服务列表。

使用服务列表,类似这样。

{
    name: "serviceInstanceName",
    type: "rawlist",
    message:
      "Choose a service instance ",
    default: this.props!.namespace,
    choices: srvInstanceList,
    when: () =>
      srvInstanceList !== undefined && !isEmpty(srvInstanceList),
  },

我需要做什么:

  1. 运行 API(rest)调用以获取命名空间列表,将其作为列表显示给用户
  1. 当用户选择一个特定的命名空间时,我需要做一个新的rest调用来获取这个命名空间中的所有服务
  2. 用户选择服务

我应该把每个问题的逻辑放在哪里并传递给下一个问题

【问题讨论】:

    标签: javascript node.js typescript yeoman yeoman-generator


    【解决方案1】:

    我没有任何代码示例来支持答案,但如果我是你,我会:

    1. 运行 API(rest)调用以获取命名空间列表,将其作为列表显示给用户
    2. 当用户选择一个特定的命名空间时,我需要做一个新的rest调用来获取这个命名空间中的所有服务
    3. 用户选择服务

    对于与命名空间相关的问题,请使用choices 属性和返回函数,该函数将加载所有命名空间。同样,对于与服务相关的问题,请使用choices 属性和返回函数,该函数将加载命名空间中的所有服务。

    这是choices的文档:

    choices:(数组|函数)选择数组或返回选择数组的函数。如果定义为函数,则第一个参数将是当前询问者会话答案。数组值可以是简单的数字、字符串或包含名称(显示在列表中)、值(保存在答案哈希中)和简短(选择后显示)属性的对象。

    在函数中,您将获得第一个参数,其中包含用户对之前问题的回答。

    此外,您可以在问题中使用when 属性来确定是否应该根据之前的答案提出或跳过该问题。

    参考:https://github.com/SBoudrias/Inquirer.js/blob/master/README.md

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多