Aceite a entrada da linha de comando em Node.js
Como criar um programa Node.js de CLI interativa?
Desde a versão 7 o Node.js possui o módulo readline
para fazer exatamente isso: obter entradas de uma stream de leitura, como a process.stdin
, via terminal, durante a execução de um programa Node.js, uma linha por vez.
const readline = require('readline').createInterface({input: process.stdin,output: process.stdout})readline.question(`What's your name?`, name => {console.log(`Hi ${name}!`)readline.close()})
Esse trecho de código pergunta o nome do usuário, e uma vez que o texto é inserido e o usuário pressiona enter, nós enviamos uma saudação.
O método question()
exibe o primeiro parâmetro (a pergunta) e aguarda pela entrada do usuário. A função de callback é invocada uma vez que o enter é pressionado.
Nessa função de callback, nós fechamos a interface do readline.
readline
oferece diversos outros métodos, e você pode conferir todos na documentação linkada acima.
Se você precisa solicitar uma senha, o ideal é que os caracteres digitados sejam trocados pelo símbolo de *
.
A maneira mais simples de fazer isso é utilizar o pacote readline-sync
, que é muito similar em termos de API.
Outra solução mais completa e abstrata é fornecida pelo pacote Inquirer.js.
Instale-o utilizando npm install inquirer
, e então você poderá replicar o código acima dessa forma:
const inquirer = require('inquirer')var questions = [{type: 'input',name: 'name',message: "What's your name?"}]inquirer.prompt(questions).then(answers => {console.log(`Hi ${answers['name']}!`)})
Inquirer.js permite com que você faça diversas coisas como perguntas de múltipla escolha, ter radio buttons, confirmações e muito mais.
Vale a pena conhecer todas as alternativas, especialmente as nativas do Node.js, mas se você planeja levar a CLI para outro nível, Inquirer.js é ótima escolha.