微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用API​​调用创建yeoman生成器

如何解决使用API​​调用创建yeoman生成器

我创建了一个可以正常工作的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 ";
  },

用户应该选择一个名称空间(这里的技巧是我需要运行一些逻辑,即rest调用以返回名称空间列表),为此名称空间我需要添加一个问题。也就是说,对于用户选择的命名空间,我需要提供服务列表。

带有服务列表,类似这样。

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

我需要做什么:

  1. 运行API(其余)调用获取名称空间列表,并将其作为列表显示用户
  1. 用户选择特定的名称空间时,我需要执行一个新的rest调用获取名称空间中的所有服务
  2. 用户选择服务

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

解决方法

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

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

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

以下是choices上的文档:

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

在该函数中,您将获得第一个参数,其中将包含用户对先前的问题给出的答案。

此外,您可以在问题中使用when属性,根据先前的答案来确定是要提问还是要跳过该问题。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。