需求
大家在开发时,有时需要从命令行读取用户的输入,或者让用户选择。在nodejs中,这个怎么实现?
原生实现 ❌
process.stdin.setEncoding('utf8');
process.stdin.on('readable', () => {
let chunk;
// 使用循环确保我们读取所有的可用输入
while ((chunk = process.stdin.read()) !== null) {
console.log(`你输入的数据是: ${chunk}`);
}
});
process.stdin.on('end', () => {
process.stdout.write('结束输入.\\n');
});
可以看到 ,整体比较麻烦 ,而且可扩展性不强,如果不是单纯输入,而需要用户选择等,还要更多代码实现。
inquirer框架 ✅
输入
代码
import input from '@inquirer/input';
(async () => {
const answer = await input({ message: 'Enter your name' });
console.log(answer)
})()
选择
代码
import select, { Separator } from '@inquirer/select';
const answer = await select({
message: 'Select a package manager',
choices: [
{
name: 'npm',
value: 'npm',
description: 'npm is the most popular package manager',
},
{
name: 'yarn',
value: 'yarn',
description: 'yarn is an awesome package manager',
},
new Separator(),
{
name: 'jspm',
value: 'jspm',
disabled: true,
},
{
name: 'pnpm',
value: 'pnpm',
disabled: '(pnpm is not available)',
},
],
});
其还支持更多丰富的交互方式,可以在github上搜Inquirer.js查看其更多用法。