Aceitar entrada do comando de linha no Node.js
Como tornar um programa CLI Node.js interativo?
O Node.js, desde a versão 7, fornece o módulo readline
para fazer exatamente isso: obter entrada de um fluxo legível, como o fluxo process.stdin
, que durante a execução de um programa Node.js é a entrada do terminal, linha por linha.
const readline = require('node:readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("Qual o seu nome?", name => {
console.log('Olá ' + name + '!');
rl.close();
});
Este trecho de código pergunta o nome do usuário e, assim que o texto é inserido e o usuário pressiona Enter, enviamos uma saudação.
O método question()
mostra o primeiro parâmetro (uma pergunta) e aguarda a entrada do usuário. Ele chama a função de retorno de chamada assim que Enter é pressionado.
Nesta função de retorno de chamada, fechamos a interface readline
.
readline
oferece vários outros métodos, por favor, verifique-os na documentação do pacote vinculada acima.
Se você precisar solicitar uma senha, é melhor não exibi-la, mas sim mostrar um símbolo *.
A maneira mais simples é usar o pacote readline-sync
, que é muito semelhante em termos da API e lida com isso diretamente. Uma solução mais completa e abstrata é fornecida pelo pacote Inquirer.js.
Você pode instalá-lo usando npm install inquirer
, e então você pode replicar o código acima assim:
const inquirer = require('inquirer');
const questions = [
{
type: 'input',
name: 'name',
message: "Qual o seu nome?"
}
];
inquirer.prompt(questions).then(answers => {
console.log('Olá ' + answers.name + '!');
});
Inquirer.js
permite que você faça muitas coisas, como fazer perguntas de múltipla escolha, ter botões de rádio, confirmações e muito mais.
Vale a pena conhecer todas as alternativas, especialmente as integradas fornecidas pelo Node.js, mas se você planeja levar a entrada CLI para o próximo nível, Inquirer.js
é uma escolha ideal.