以下内容为chatgpt翻译
内容取自: https://www.npmjs.com/package/inquirer/v/8.2.6
![Inquirer.js Inquirer Logo](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fraw.githubusercontent.com%2FSBoudrias%2FInquirer.js%2Fmaster%2Fassets%2Finquirer_readme.svg%3Fsanitize%3Dtrue&pos_id=img-ULcWviWz-1716431925760%29)
Inquirer.js
一个常见的交互式命令行用户界面集合。
目录
目标和理念
Inquirer.js
力求成为一个易于嵌入和美观的命令行界面工具,适用于 Node.js(也许是“CLI Xanadu”)。
Inquirer.js
应该简化以下过程:
- 提供 错误反馈
- 提问
- 解析 输入
- 验证 答案
- 管理 层级提示
注意:
Inquirer.js
提供用户界面和询问会话流。如果你在寻找一个完整的命令行程序实用工具,请查看 commander、 vorpal 或 args。
文档
安装
npm install inquirer
var inquirer = require('inquirer');
inquirer
.prompt([
/* 在这里传递你的问题 */
])
.then((answers) => {
// 使用用户反馈做任何事情
})
.catch((error) => {
if (error.isTtyError) {
// 当前环境无法渲染提示
} else {
// 发生了其他错误
}
});
示例 (运行并查看)
查看 packages/inquirer/examples/
文件夹中的代码和界面示例。
node packages/inquirer/examples/pizza.js
node packages/inquirer/examples/checkbox.js
# 等等...
方法
inquirer.prompt(questions, answers) -> promise
启动提示界面(询问会话)
- questions (数组) 包含 问题对象(使用 响应式界面,也可以传递
Rx.Observable
实例) - answers (对象) 包含已回答问题的值。Inquirer 会避免询问已经提供答案的问题。默认为
{}
。 - 返回一个 Promise
inquirer.registerPrompt(name, prompt)
以 name
注册提示插件。
- name (字符串) 新提示的名称。(用于问题的
type
) - prompt (对象) 提示对象本身(插件)
inquirer.createPromptModule() -> prompt function
创建一个自包含的 inquirer 模块。如果你不想在覆盖或添加新提示类型时影响其他依赖 inquirer 的库。
var prompt = inquirer.createPromptModule();
prompt(questions).then(/* ... */);
对象
问题
一个问题对象是一个包含相关问题值的 hash
:
- type: (字符串) 提示类型。默认:
input
- 可能的值:input
,number
,confirm
,
list
,rawlist
,expand
,checkbox
,password
,editor
- name: (字符串) 存储答案时使用的名称。如果名称包含句点,它将在答案 hash 中定义一个路径。
- message: (字符串|函数) 要打印的问题。如果定义为函数,第一个参数将是当前 inquirer 会话的答案。默认为
name
的值(后跟冒号)。 - default: (字符串|数字|布尔|数组|函数) 如果没有输入,则使用的默认值,或返回默认值的函数。如果定义为函数,第一个参数将是当前 inquirer 会话的答案。
- choices: (数组|函数) 选择数组或返回选择数组的函数。如果定义为函数,第一个参数将是当前 inquirer 会话的答案。
数组值可以是简单的numbers
,strings
,或包含name
(在列表中显示),value
(在答案 hash 中保存)和short
(选择后显示)属性的objects
。选择数组还可以包含 一个Separator
。 - validate: (函数) 接收用户输入和答案 hash。应返回
true
如果值有效,否则返回错误消息(字符串
)。如果返回false
,则提供默认错误消息。 - filter: (函数) 接收用户输入和答案 hash。返回要在程序中使用的过滤值。返回的值将添加到 Answers hash 中。
- transformer: (函数) 接收用户输入、答案 hash 和选项标志,并返回要显示给用户的转换值。转换仅影响编辑时显示的内容。它不会修改答案 hash。
- when: (函数, 布尔) 接收当前用户答案 hash 并根据是否应询问此问题返回
true
或false
。该值也可以是简单的布尔值。 - pageSize: (数字) 更改使用
list
,rawList
,expand
或checkbox
时渲染的行数。 - prefix: (字符串) 更改默认 前缀 消息。
- suffix: (字符串) 更改默认 后缀 消息。
- askAnswered: (布尔) 强制提示问题如果答案已经存在。
- loop: (布尔) 启用列表循环。默认:
true
default
、choices
(如果定义为函数)、validate
、filter
和 when
函数可以异步调用。可以返回一个 promise 或使用 this.async()
来获取一个回调,你将调用它以获得最终值。
{
/* 首选方式:使用 promise */
filter() {
return new Promise(/* 等等... */);
},
/* 传统方式:使用 this.async */
validate: function (input) {
// 声明函数为异步,并保存完成回调
var done = this.async();
// 执行异步操作
setTimeout(function() {
if (typeof input !== 'number') {
// 在完成回调中传递返回值
done('你需要提供一个数字');
return;
}
// 在完成回调中传递返回值
done(null, true);
}, 3000);
}
}
答案
一个包含客户端在每个提示中答案的键/值 hash。
- 键 问题对象的
name
属性 - 值 (取决于提示)
confirm
: (布尔)input
: 用户输入(如果定义了filter
则过滤)(字符串)number
: 用户输入(如果定义了filter
则过滤)(数字)rawlist
,list
: 选择的值(如果未指定值则为名称)(字符串)
分隔符
可以将分隔符添加到任何 choices
数组中:
// 在问题对象中
choices: [ "选项A", new inquirer.Separator(), "选项B" ]
// 显示如下
[
?] 请选择:
> 选项A
------------
选项B
你可以为分隔符设置一个自定义行:
// 自定义行
new inquirer.Separator(' = 选择分组 = ');
提示类型
如果没有指定 type
,默认类型是 input
。
输入 - (input)
{
type: 'input',
name: 'first_name',
message: "你叫什么名字?"
}
确认 - (confirm)
{
type: 'confirm',
name: 'to_be_deleted',
message: '你确定要删除吗?',
default: false
}
列表 - (list)
{
type: 'list',
name: 'theme',
message: '你想使用哪个主题?',
choices: ['黄色', '红色', '绿色', '蓝色'],
filter: function(val) {
return val.toLowerCase();
}
}
原始列表 - (rawlist)
{
type: 'rawlist',
name: 'theme',
message: '你想使用哪个主题?',
choices: ['黄色', '红色', '绿色', '蓝色']
}
展开 - (expand)
通过添加一个关键字来扩展选择。
{
type: 'expand',
message: '与应用程序发生了什么?',
name: 'reason',
choices: [
{
key: 'd',
name: '开发人员错误',
value: 'dev_error'
},
{
key: 'u',
name: '用户错误',
value: 'user_error'
},
{
key: 'o',
name: '其他',
value: 'other'
}
]
}
复选框 - (checkbox)
{
type: 'checkbox',
message: '选择你喜欢的颜色',
name: 'colors',
choices: [
{
name: '红色',
checked: true
},
{
name: '蓝色'
},
{
name: '绿色'
}
]
}
密码 - (password)
{
type: 'password',
message: '输入你的秘密',
name: 'secret',
mask: '*'
}
编辑器 - (editor)
将文本编辑器用于多行文本输入。
{
type: 'editor',
message: '输入你的笔记',
name: 'notes'
}
反应性界面
Inquirer 提供一个 Rx 接口来创建更复杂的提示流。
var observable = Rx.Observable.create(function (observer) {
observer.next({
type: 'input',
name: 'first_name',
message: "你叫什么名字?"
});
observer.next({
type: 'input',
name: 'last_name',
message: "你的姓氏是什么?",
when: function (answers) {
return answers.first_name !== '中立';
}
});
observer.complete();
});
inquirer.prompt(observable);
支持
有关问题或功能请求,请使用 GitHub issues tracker。
已知问题
查看 GitHub issues。
新闻
查看 GitHub releases。
贡献
许可
MIT 许可。查看 LICENSE 文件。
插件
一些插件以扩展 Inquirer 的功能:
- inquirer-datepicker-prompt: 日期选择提示插件
- inquirer-autocomplete-prompt: 自动完成提示插件
- inquirer-command-prompt: 命令提示插件
- inquirer-recursive: 递归询问插件