首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在inquirer.js中自动回答问题?

如何在inquirer.js中自动回答问题?
EN

Stack Overflow用户
提问于 2020-12-04 06:38:52
回答 1查看 348关注 0票数 1

我正在用typescript编写一个小的命令行界面,我有一个命令,它基本上允许我生成一个带有默认值的json文件(就像npm init -y一样),但我不知道如何在查询器中自动回答问题。

这是我到目前为止所得到的:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 21:48:09

有点像生活黑客,但我通过创建一个返回默认值对象的defaults()函数,成功地在查询器中“自动回答”了我的问题。

然后,如果我的answer对象为空,我就可以使用它们,如下所示:

代码语言:javascript
复制
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);
      })
    );
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65135250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档