嘿,会Node.js 的小伙伴们!今天咱们来聊聊一个超级实用的 Node.js 库——inquirer.js。如果你想要让你的命令行工具变得交互式,那这个库绝对是你的不二之选。它能让你轻松创建出美观、易用的文本界面,让用户的输入体验更上一层楼。
安装 Inquirer.js
安装起来也是分分钟的事,用 npm 或 yarn 都可以:
npm install inquirer
或者
yarn add inquirer
快速上手
安装完了,咱们就可以开始玩耍了。先来个简单的示例,看看 inquirer.js 是怎么用的:
const inquirer = require('inquirer');
const questions = [
{
type: 'input',
name: 'username',
message: '嘿,你叫啥呀?',
},
{
type: 'password',
name: 'password',
message: '密码悄悄告诉我:',
},
];
inquirer.prompt(questions).then(answers => {
console.log('用户名:', answers.username);
console.log('密码:', answers.password);
});
这段代码里,咱们定义了两个问题:用户名和密码。type 参数告诉 inquirer.js 我们想要的输入类型,name 是问题的答案名称,message 是咱们要问用户的问题。
丰富的问题类型
inquirer.js 提供了一大堆问题类型,满足各种不同的需求:
输入(Input)
就是普通的文本输入。
{
type: 'input',
name: 'name',
message: '你的名字是啥?',
}
密码(Password)
和输入一样,但输入的内容不会显示出来。
{
type: 'password',
name: 'password',
message: '密码多少呀?',
}
确认(Confirm)
用户可以通过输入 y 或 n 来回答“是”或“否”。
{
type: 'confirm',
name: 'continue',
message: '咱们继续吗?',
}
列表(List)
让用户从列表里挑一个。
{
type: 'list',
name: 'theme',
message: '选个主题呗:',
choices: ['亮堂的', '暗夜的', '自定义的'],
}
下拉列表(Expand)
下拉列表,用户可以用方向键选择多个选项。
{
type: 'expand',
name: 'abilities',
message: '超能力选哪个?',
choices: [
{
key: 'p',
name: '力大无穷',
value: 'power',
},
{
key: 's',
name: '快如闪电',
value: 'speed',
},
// 更多选项...
],
}
编辑器(Editor)
这个厉害了,让用户在外部编辑器里写东西。
{
type: 'editor',
name: 'bio',
message: '来,写个自我介绍:',
}
处理用户的回答
inquirer.prompt() 方法返回一个 Promise,用户一提交答案,Promise 就会带着所有答案的对象来解析。你可以拿这些答案去做各种酷炫的事。
inquirer.prompt(questions).then(answers => {
// 用 answers 对象干点啥
console.log('用户名:', answers.username);
});
动态提问
有时候,你可能想问的问题取决于用户之前的回答。inquirer.js 支持这种智能模式,用 when 属性就能搞定。
const questions = [
{
type: 'confirm',
name: 'hasAccount',
message: '有账户不?',
},
{
type: 'input',
name: 'username',
message: '用户名是啥?',
when: answers => answers.hasAccount
},
{
type: 'input',
name: 'email',
message: '邮箱地址呢?',
when: answers => !answers.hasAccount
}
];
在这个例子里,用户名的输入框会不会显示,取决于用户对 hasAccount 的回答。
装饰你的命令行
inquirer.js 还让你能通过 prefix 属性来加个前缀,或者用 transformer 函数来美化显示给用户的答案。
{
type: 'input',
name: 'name',
message: '叫啥?',
prefix: '称呼:',
transformer: input => `你好啊,${input}!`,
}
和其他 Node.js 工具一起玩
inquirer.js 可以和其他 Node.js 工具一起用,比如和 cross-spawn 模块搭配,根据用户的回答执行不同的命令。
const { spawn } = require('cross-spawn');
inquirer.prompt([
{
type: 'list',
name: 'action',
message: '想干点啥?',
choices: ['装点依赖', '跑个测试', '撤了'],
},
]).then(answers => {
const command = answers.action === '装点依赖' ? 'npm install' : 'npm test';
spawn.sync(command, [], { stdio: 'inherit' });
});
总结
inquirer.js 是一个功能超群的库,能让你的命令行工具变得既强大又用户友好。无论是简单的数据收集,还是复杂的多步骤交互,inquirer.js 都能帮你搞定。今天咱们学了 inquirer.js 的基本用法,现在你应该对这个库有个大概的了解了。