Skip to content

Latest commit

 

History

History
53 lines (36 loc) · 2.18 KB

08.aceitando_entradas_de_linha_de_comando_no_node.md

File metadata and controls

53 lines (36 loc) · 2.18 KB

Aceitando entradas de linha de comando no Node.js

Como tornar um programa CLI do Node.js interativo?

O Node.js desde a versão 7 fornece o módulo readline para fazer exatamente isso: obter entrada de uma stream legíxel, como o fluxo process.astdin, que durante a execução de um programa Node.js é a entrada do terminal, 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();
});

Este pedaço de código pergunta o nome do usuário, e uma vez que o texto é digitado e o usuário pressiona enter, nós 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 o enter é pressionado.

Nesta função de retorno de chamada (a famosa callback), fechamos o readline interface.

readline oferece vários outros métodos, verifique-os na ducmentação do pacote colocada acima.

Se você precisar exigir uma senha, é melhor não repeti-la, mas mostrar um símbolo * por exemplo.

A maneira mais simples é usar o pacote readline-sync, que é muito semelhante em termos de API e lida com isso imediatamente.

Uma solução mais completa e abstrata é fornecida pelo pacote Inquirer.js.

Você pode instalá-lo usando npm install inquirer e, em seguida, pode replicar o código acima assim:

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}!`);
});

O Inquirer.js permite que você faça muitas coisas, como fazer várias opções, ter botões de opção, confirmações e muito mais.

Vale a pena conhecer todas as alternativas, especialmente as oferecidas pelos módulos nativo do Node.js, mas se você planejava levar a entrada da CLI para o próximo nível, o Inquirer.js é a escolha ideal.