从 Node.js 命令行接收输入
如何使 Node.js 命令行界面 (CLI) 程序具有交互性?
从 Node.js 7 版本开始,提供了 readline
模块来实现此功能:从可读流(例如 process.stdin
流)获取输入,在 Node.js 程序执行期间,该流每次一行地接收终端输入。
javascript
const readline = require('node:readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("What's your name?", name => {
console.log('Hi ' + name + '!');
rl.close();
});
这段代码询问用户的姓名,一旦输入文本并按下 Enter 键,我们就发送问候语。
question()
方法显示第一个参数(一个问题)并等待用户输入。按下 Enter 键后,它会调用回调函数。
在这个回调函数中,我们关闭 readline 接口。
readline
提供了其他几种方法,请查看上面链接的包文档。
如果您需要输入密码,最好不要将其回显,而是显示 * 符号。
最简单的方法是使用 readline-sync
包,它在 API 方面非常相似,并且开箱即用地处理这个问题。Inquirer.js
包提供了更完整和抽象的解决方案。
您可以使用 npm install inquirer
安装它,然后您可以像这样复制上面的代码:
javascript
const inquirer = require('inquirer');
const questions = [
{
type: 'input',
name: 'name',
message: "what's your name?"
}
];
inquirer.prompt(questions).then(answers => {
console.log('Hi ' + answers.name + '!');
});
Inquirer.js
允许您执行许多操作,例如询问多种选择、使用单选按钮、确认等等。
了解所有替代方案,特别是 Node.js 提供的内置方案,是值得的,但是如果您计划将 CLI 输入提升到一个新的水平,Inquirer.js
是一个最佳选择。