如何使用内置的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是一个优秀的选择。