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

简介: 在Node.js中接受来自命令行的输入

1、简介

如何制作一个Node.js CLI程序使用内置的readline Node.js模块进行交互

如何制作一个节点js CLI程序交互?

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

1. const readline = require('readline').createInterface({
2. input: process.stdin,
3. output: process.stdout,
4. });
5. readline.question(`What's your name?`, name => {
6. console.log(`Hi ${name}!`);
7.   readline.close();
8. });

 

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

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

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

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

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

最简单的方法是使用readline-sync包,它在API方面非常相似,并且开箱即用。

2、readlineSync

同步读取行,用于交互式运行,以便通过控制台(TTY)与用户进行对话。

1. import readlineSync from 'readline-sync'
2. // Wait for user's response.
3. var userName = readlineSync.question('readline-sync ==> 你的名字? ');
4. console.log('Hi ' + userName + '!');

 

3、列表选择一个项目:

1. var readlineSync = require("readline-sync"),
2.   animals = ["Lion", "Elephant", "Crocodile", "Giraffe", "Hippo"],
3.   index = readlineSync.keyInSelect(animals, "Which animal?");
4. console.log("Ok, " + animals[index] + " goes to your room.");

 

4、类似滑块范围的UI:

(按Z键向左滑动,按X键向右滑动,按空格键退出)

1. var readlineSync = require("readline-sync"),
2. MAX = 60,
3. MIN = 0,
4.   value = 30,
5.   key;
6. console.log("\n\n" + new Array(20).join(" ") + "[Z] <- -> [X]  FIX: [SPACE]\n");
7. while (true) {
8. console.log(
9. "\x1B[1A\x1B[K|" +
10. new Array(value + 1).join("-") +
11. "O" +
12. new Array(MAX - value + 1).join("-") +
13. "| " +
14.       value
15.   );
16.   key = readlineSync.keyIn("", { hideEchoBack: true, mask: "", limit: "zx " });
17. if (key === "z") {
18. if (value > MIN) {
19.       value--;
20.     }
21.   } else if (key === "x") {
22. if (value < MAX) {
23.       value++;
24.     }
25.   } else {
26. break;
27.   }
28. }
29. console.log("\nA value the user requested: " + value);

 

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

Inquirer.js包地址:

https://github.com/SBoudrias/Inquirer.js

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

1. import inquirer from 'inquirer';
2. const questions = [
3.  {
4. type: 'input',
5. name: 'name',
6. message: "你的名字?",
7.  },
8. ];
9. 
10. inquirer.prompt(questions).then(answers => { 
11. console.log(`Hi ${answers.name}!`);
12. });

 

Inquirer.js允许你做很多事情,比如询问多个选择,单选按钮,确认等等。

了解所有的替代方案都是值得的,尤其是Node.js 提供的内置方案。但如果您计划将CLI输入提升到下一个级别,则可以使用Inquirer.js是最佳选择。

功能和readline-sync包类似,但是功能更加强大,具体使用可以参考官网。

相关文章
|
1天前
|
JavaScript 数据安全/隐私保护
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
2 0
|
1天前
|
JavaScript 数据安全/隐私保护 索引
node.js 命令行交互工具(最新版) inquirer.js 实用教程
node.js 命令行交互工具(最新版) inquirer.js 实用教程
2 0
|
1天前
|
Web App开发 JavaScript 前端开发
js 调试—— 【控制台】debugger语句 、 命令行API
js 调试—— 【控制台】debugger语句 、 命令行API
5 0
|
2月前
|
JavaScript 前端开发
Node.js新手必备:超实用命令行入门教程
Node.js新手必备:超实用命令行入门教程
26 0
|
2月前
|
安全 JavaScript 测试技术
命令行 set NODE_TLS_REJECT_UNAUTHORIZED =0 的含义介绍
命令行 set NODE_TLS_REJECT_UNAUTHORIZED =0 的含义介绍
|
11月前
|
前端开发 JavaScript
前端学习笔记202305学习笔记第二十四天-命令行执行js
前端学习笔记202305学习笔记第二十四天-命令行执行js
46 0
|
11月前
webstorm命令行提示‘node‘ 或‘npm‘不是内部或外部命令,也不是可运行的程序
webstorm命令行提示‘node‘ 或‘npm‘不是内部或外部命令,也不是可运行的程序
|
JavaScript
使用Node. js输出到命令行
使用Node. js输出到命令行
|
JavaScript
node.js:Inquirer.js接收命令行交互输入
node.js:Inquirer.js接收命令行交互输入
267 0
node.js:Inquirer.js接收命令行交互输入
|
JavaScript
node.js:Commander.js命令行接口
node.js:Commander.js命令行接口