需求
大家在开发时,有时需要从命令行读取用户的输入,或者让用户选择。在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查看其更多用法。