在Node中接受来自命令行的输入

260 阅读1分钟

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