簡體   English   中英

使用 API 調用創建自耕農生成器

[英]Create yeoman generator with API's calls

我已經創建了一個可以正常工作的 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 (rest) 調用以獲取命名空間列表,並將其作為列表顯示給用戶
  1. 當用戶選擇一個特定的命名空間時,我需要做一個新的rest調用來獲取這個命名空間中的所有服務
  2. 用戶選擇服務

我應該把每個問題的邏輯放在哪里並將其傳遞給下一個問題

我沒有任何代碼示例來支持答案,但如果我是你,我會:

  1. 運行 API (rest) 調用以獲取命名空間列表,並將其作為列表顯示給用戶
  2. 當用戶選擇一個特定的命名空間時,我需要做一個新的rest調用來獲取這個命名空間中的所有服務
  3. 用戶選擇服務

對於命名空間相關的問題,使用將加載所有命名空間的choices屬性和返回函數。 同樣,對於與服務相關的問題,使用choices屬性和返回函數來加載命名空間中的所有服務。

這是有關choices文檔:

選擇:(數組|函數)選擇數組或返回選擇數組的函數。 如果定義為函數,第一個參數將是當前查詢器會話的答案。 數組值可以是簡單的數字、字符串或包含名稱(顯示在列表中)、值(保存在答案散列中)和簡短(選擇后顯示)屬性的對象。

在該函數中,您將獲得第一個參數,其中包含用戶對先前問題給出的答案。

此外,您可以在問題中使用when屬性來確定是否應根據先前的答案提出或跳過該問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM