在 Node.js 中从命令行接受输入

如何使 Node.js CLI 程序具有交互性?

从 Node.js 7 版本开始,提供了 readline 模块 来执行此操作:从可读流(如 process.stdin 流)获取输入,该流在 Node.js 程序执行期间是终端输入,每次一行。

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();
});

这段代码会询问用户的姓名,一旦用户输入文本并按下回车键,我们就会发送问候语。

question() 方法会显示第一个参数(一个问题)并等待用户输入。当用户按下回车键时,它会调用回调函数。

在这个回调函数中,我们关闭了 readline 接口。

readline 提供了其他几种方法,请查看上面链接的包文档。

如果需要输入密码,最好不要回显密码,而是显示一个 * 符号。

最简单的方法是使用 readline-sync,它在 API 方面非常相似,并且可以开箱即用地处理这个问题。

Inquirer.js 包 提供了一个更完整、更抽象的解决方案。

您可以使用 npm install inquirer 安装它,然后您可以像这样复制上面的代码

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 是一个最佳选择。

阅读时间
2 分钟阅读
贡献
编辑此页面