Project Icon

Inquirer.js

交互式命令行用户界面库

Inquirer.js 是一个提供多种提示类型的交互式命令行用户界面库,包括输入框、选择框、复选框、确认对话框、搜索框和密码框。它能够简化用户输入处理,并且通过重写实现了更小的包大小和更高的性能。该工具适用于创建自定义提示,可用于预提交或 git 钩子、脚本等。详细文档和示例可帮助轻松集成到项目中。

Inquirer 标志

Inquirer

npm FOSSA 状态

常见交互式命令行用户界面的集合。

列表提示

在你自己的终端中试试吧!

npx @inquirer/demo@latest

安装

npmyarn
npm install @inquirer/prompts
yarn add @inquirer/prompts

[!注意] Inquirer 最近进行了彻底的重写,以减小包的大小并提高性能。之前版本的包仍在维护(虽然不再积极开发),并提供了数百个社区贡献的提示,这些提示可能尚未迁移到最新的 API。如果你正在寻找这些,之前的包在这里

使用方法

import { input } from '@inquirer/prompts';

const answer = await input({ message: '输入你的名字' });

提示

输入

输入提示

import { input } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

选择

选择提示

import { select } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

复选框

复选框提示

import { checkbox } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

确认

确认提示

import { confirm } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

搜索

搜索提示

import { search } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

密码

密码提示

import { password } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

展开

展开提示关闭 展开提示展开

import { expand } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

编辑器

在临时文件上启动用户首选编辑器的实例。一旦用户退出编辑器,临时文件的内容将被读取作为答案。使用的编辑器由读取 $VISUAL 或 $EDITOR 环境变量来确定。如果这两个都不存在,则使用操作系统默认的编辑器(Windows 上为 notepad,Mac 或 Linux 上为 vim)。

import { editor } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

数字

input 提示非常相似,但具有内置的数字验证配置选项。

import { number } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

原始列表

原始列表提示

import { rawlist } from '@inquirer/prompts';

查看文档获取使用示例和选项文档。

创建你自己的提示

API 文档在这里,我们的测试工具在这里

高级用法

所有 inquirer 提示都是接受两个参数的函数。第一个参数是提示配置(每个提示都是唯一的)。第二个参数提供上下文或运行时配置。

上下文选项包括:

属性类型必需描述
inputNodeJS.ReadableStream标准输入流(默认为 process.stdin
outputNodeJS.WritableStream标准输出流(默认为 process.stdout
clearPromptOnDoneboolean如果为true,我们将在回答提示后清除屏幕

示例:

import { confirm } from '@inquirer/prompts';

const allowEmail = await confirm(
  { message: '您允许我们向您发送电子邮件吗?' },
  {
    output: new Stream.Writable({
      write(chunk, _encoding, next) {
        // 执行某些操作
        next();
      },
    }),
    clearPromptOnDone: true,
  },
);

取消提示

所有提示函数都返回一个可取消的promise。这种特殊的promise类型有一个cancel方法,可以取消并清理提示。

调用cancel时,答案promise将被拒绝。

import { confirm } from '@inquirer/prompts';

const answer = confirm(...); // 注意:对于这个你不能使用 `await`

answer.cancel();

使用方法

在对象中获取答案

当询问多个问题时,您可能不想在每个地方都为每个答案保留一个变量。在这种情况下,您可以将答案放在一个对象中。

import { input, confirm } from '@inquirer/prompts';

const answers = {
  firstName: await input({ message: "您的名字是什么?" }),
  allowEmail: await confirm({ message: '您允许我们向您发送电子邮件吗?' }),
};

console.log(answers.firstName);

有条件地提问

也许某些问题取决于其他问题的答案。

import { input, confirm } from '@inquirer/prompts';

const allowEmail = await confirm({ message: '您允许我们向您发送电子邮件吗?' });

let email;
if (allowEmail) {
  email = await input({ message: '您的电子邮件地址是什么' });
}

在超时后获取默认值

import { setTimeout } from 'node:timers/promises';
import { input } from '@inquirer/prompts';

const ac = new AbortController();
const prompt = input({
  message: '输入一个值(5秒后超时)',
});

prompt
  .finally(() => {
    ac.abort();
  })
  // 静默取消错误。
  .catch(() => {});

const defaultValue = setTimeout(5000, 'timeout', { signal: ac.signal }).then(() => {
  prompt.cancel();
  return '已超时!';
});

const answer = await Promise.race([defaultValue, prompt]);

用作预提交/git钩子,或脚本

默认情况下,从husky/lint-staged等工具运行的脚本可能不会在交互式shell中运行。在非交互式shell中,Inquirer无法运行,用户也无法向进程发送按键事件。

为了使其工作,您必须确保启动一个tty(或"交互式"输入流)。

如果这些脚本在您的package.json中设置,您可以像这样定义流:

  "precommit": "my-script < /dev/tty"

或者如果在shell脚本文件中,您可以这样做:(在Windows上这可能是您唯一的选择)

#!/bin/sh
exec < /dev/tty

node my-script.js

等待配置

也许某些问题配置需要等待一个值。

import { confirm } from '@inquirer/prompts';

const answer = await confirm({ message: await getMessage() });

社区提示

如果您创建了一个很酷的提示,发送PR添加它到下面的列表中!

交互式列表提示
使用箭头键 + 回车或按与选项相关的键来选择。

? 选择一个选项:
>   运行命令 (D)
    退出 (Q)

动作选择提示
从列表中选择一个项目,并通过按键选择要采取的动作。

? 选择一个文件 打开 <O> 编辑 <E> 删除 <X>
❯ image.png
  audio.mp3
  code.py

表格多选提示
从表格显示中选择多个答案。

在选项之间选择?(按 <空格> 选择,<上下键> 移动行,
<左右键> 移动列)

┌──────────┬───────┬───────┐
│ 1-2 of 2 │ 是?   │ 否?   |
├──────────┼───────┼───────┤
│ 选项 1    │ [ ◯ ] │   ◯   |
├──────────┼───────┼───────┤
│ 选项 2    │   ◯   │   ◯   |
└──────────┴───────┴───────┘

切换提示
用切换来确认。使用箭头键 + 回车选择选项。

? 您要继续吗? 否 / 是

可排序复选框提示
与内置的复选框提示相同,但也允许使用ctrl+上/下重新排序选项。

? 您想合并哪些PR以及按什么顺序?(按 <空格> 选择,<a> 切换全部,<i> 反转选择,<ctrl+上> 向上移动项目,<ctrl+下> 向下移动项目,然后按 <回车> 继续)
❯ ◯ PR 1
  ◯ PR 2
  ◯ PR 3

多选提示

一个支持多选和过滤/搜索的inquirer选择。

? 选择您的操作系统、IDE、编程语言等。(按 <tab> 选择/取消选择,<退格键> 删除已选选项,<回车> 选择选项)
>>  vue
>[ ] vue
 [ ] vuejs
 [ ] fuelphp
 [ ] venv
 [ ] vercel
 (使用箭头键显示更多选项)

文件选择器提示
一个文件选择器,您可以在目录之间自由导航,选择要允许的文件类型,并且它是完全可定制的。

? 选择一个文件:
/main/path/
├── folder1/
├── folder2/
├── folder3/
├── file1.txt
├── file2.pdf
└── file3.jpg (不允许)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
使用 ↑↓ 在列表中导航
按 <esc> 导航到父目录
按 <回车> 选择文件或导航到目录

许可证

版权所有 (c) 2023 Simon Boudrias (twitter: @vaxilart)
根据MIT许可证授权。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号