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

這段程式碼詢問使用者的名字,一旦輸入文字並按下 Enter 鍵,我們將發送一個問候。

question() 方法顯示第一個參數(一個問題),並等待使用者輸入。它在按下 Enter 鍵時調用回調函數。

在這個回調函數中,我們關閉了 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 分鐘
貢獻
編輯此頁面