如何使用内置的readline Node模块使Node.js CLI程序具有交互性
如何使Node.js的CLI程序具有交互性?
Node从第7版开始就提供了readline 模块来执行这个任务:从一个可读流中获取输入,比如process.stdin 流,在Node程序的执行过程中,它就是终端输入,一次一行。
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
})
readline.question(`What's your name?`, (name) => {
console.log(`Hi ${name}!`)
readline.close()
})
这段代码询问用户名,一旦输入文本并且用户按了回车键,我们就会发送一个问候语。
question() 方法显示第一个参数(一个问题)并等待用户输入。一旦回车键被按下,它就会调用回调函数。
在这个回调函数中,我们关闭readline接口。
readline 提供了其他几个方法,我会让你在我上面链接的软件包文档中查看它们。
如果你需要要求一个密码,最好不要回调,而是显示一个* 符号。
最简单的方法是使用readline-sync 包,它在API方面非常相似,并且开箱即处理。
Inquirer.js包提供了一个更完整和抽象的解决方案。
你可以使用npm install inquirer 来安装它,然后你可以像这样复制上面的代码。
const inquirer = require('inquirer')
var questions = [{
type: 'input',
name: 'name',
message: "What's your name?",
}]
inquirer.prompt(questions).then(answers => {
console.log(`Hi ${answers['name']}!`)
})
Inquirer.js可以让你做很多事情,比如问多个选择,有单选按钮,确认,等等。
值得了解所有的替代方案,尤其是Node提供的内置方案,但如果你打算将CLI输入法提升到新的水平,Inquirer.js是一个最佳选择。