【问题标题】:How can I auto answer questions in inquirer.js?如何在inquirer.js 中自动回答问题?
【发布时间】:2023-03-31 04:47:01
【问题描述】:

我正在使用 typescript 编写一个小型 CLI,并且我有一个命令,它基本上允许我生成一个包含默认值的 json 文件(就像 npm init -y),但我不知道如何自动回答询问者的问题。

这是我目前得到的:

export const initializeConfig = (project: string, ...args: boolean[]) => {
  prompt([
    {
      type: "input",
      name: "name",
      message: "What is the name of the project?",
      default: basename(cwd()),
      when: () => args.every((arg) => arg === false),
    },
    {
      type: "list",
      name: "project",
      message: "What is the type of the project?",
      choices: ["Node", "Python"],
      default: project,
      when: () => args.every((arg) => arg === false),
    },
  ])
    .then((answers: Answers) => {
      config = setConfig({ name: answers.name });
      config = setConfig({ project: answers.project });
    })
    .then(() =>
      prompt([
        {
          type: "input",
          name: "path",
          message: "Where is your project root located?",
          default: ".",
          when: () => args.every((arg) => arg === false),
        },
        {
          type: "input",
          name: "ignore",
          message: "What do you want to ignore? (comma separated)",
          default: defaultIgnores(config.project).ignore,
          when: () => args.every((arg) => arg === false),
        },
      ]).then((answers: Answers) => {
        config = setConfig(ignoreFiles(config.project, answers.ignore));
        createConfig(answers.path, config);
      })
    );
};

我想如果我用when() 跳过/隐藏问题,它会使用默认值,但事实并非如此。总是undefined

目前在网上没有找到这个话题。有什么想法吗?

【问题讨论】:

    标签: javascript node.js command-line-interface inquirer


    【解决方案1】:

    有点像生活小窍门,但我设法通过创建一个返回默认值对象的defaults() 函数在查询器中“自动回答”我的问题。

    如果我的答案对象为空,我可以使用它们,如下所示:

    const defaults = (project: string) => {
      return {
        name: basename(cwd()),
        project,
        path: ".",
        ignore: defaultIgnores(project).ignore,
      };
    };
    
    export let config: any = {
      version,
    };
    
    export const initializeConfig = (project: string, ...args: boolean[]) => {
      prompt([
        {
          type: "input",
          name: "name",
          message: "What is the name of the project?",
          default: defaults(project).name,
          when: () => args.every((arg) => arg === false),
        },
        {
          type: "list",
          name: "project",
          message: "What is the type of the project?",
          choices: ["Node", "Python"],
          default: defaults(project).project,
          when: () => args.every((arg) => arg === false),
        },
      ])
        .then((answers: Answers) => {
          const { name, project: projectName } = defaults(project);
    
          config = setConfig({ name: answers.name || name });
          config = setConfig({ project: answers.project || projectName });
        })
        .then(() =>
          prompt([
            {
              type: "input",
              name: "path",
              message: "Where is your project root located?",
              default: defaults(project).path,
              when: () => args.every((arg) => arg === false),
            },
            {
              type: "input",
              name: "ignore",
              message: "What do you want to ignore? (comma separated)",
              default: defaults(project).ignore,
              when: () => args.every((arg) => arg === false),
            },
          ]).then((answers: Answers) => {
            const { ignore, path } = defaults(project);
    
            config = setConfig(
              ignoreFiles(config.project, (answers.ignore || ignore)!)
            );
            createConfig(answers.path || path, config);
          })
        );
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 2021-08-24
      • 1970-01-01
      • 2014-03-16
      • 2022-09-26
      • 2019-07-12
      • 2012-08-12
      • 2011-09-29
      相关资源
      最近更新 更多