如何使 Node.js CLI 程式具有互動性?
自從 Node.js 7 版開始,提供了 readline 模組,可以完全實現此功能:從可讀流(例如 process.stdin 流)獲取輸入,在 Node.js 程式執行期間,此流是終端輸入,每次一行。
readline
process.stdin
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 鍵時調用回調函數。
question()
在這個回調函數中,我們關閉了 readline 介面。
readline 提供了幾個其他方法,請查看上面連結的包文檔。
如果需要要求密碼,最好不要回顯它,而是顯示一個*符號。
*
最簡單的方法是使用readline-sync 包,它在 API 方面非常相似,並且可以立即處理這個問題。
readline-sync
一個更完整和抽象的解決方案由Inquirer.js 包提供。
您可以使用npm install inquirer安裝它,然後可以像這樣複製上面的代碼
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 是一個理想的選擇。