Saída para a linha de comando usando Node.js
Saída (output) básico usando o módulo console
O Node.js provê o módulo console
que possui uma infinidade de maneiras muito úteis para interagir com a linha de comando.
É basicamente o mesmo objeto console
encontrado no browser.
O método mais básico e mais usado é o console.log()
, que imprime a string que você passar como parâmetro.
Se você passar um objeto, ele irá renderizá-lo como uma string.
Você pode passar múltiplas variáveis para o console.log
, por exemplo:
const x = 'x'const y = 'y'console.log(x, y)
o Node.js vai printar ambas.
Nós também podemos formatar mensagens mais sofisticadas passando variáveis e um formato espeficador.
Por exemplo:
console.log('My %s has %d years', 'cat', 2)
%s
formata a variável como uma string%d
formata a variável como um número%i
formata a variável como um número, porém só a parte inteira%o
formata a variável como um objeto
Exemplo:
console.log('%o', Number)
Limpando o console
console.clear()
limpa o console (o comportamento pode mudar dependendo do console utilizado).
Contando elementos
console.count()
é um método muito conveniente.
Dado o código:
const x = 1const y = 2const z = 3console.count('O valor de x é ' + x + ' e foi validado .. quantas vezes?')console.count('O valor de x é ' + x + ' e foi validado .. quantas vezes?')console.count('O valor de y é ' + y + ' e foi validado .. quantas vezes?')
O que acontece é que ele vai contar o número de vezes que uma string foi impressa, e imprime o total:
Você pode contar maçãs e laranjas, por exemplo:
const oranges = ['orange', 'orange']const apples = ['just one apple']oranges.forEach(fruit => {console.count(fruit)})apples.forEach(fruit => {console.count(fruit)})
Imprimindo a pilha de execução
Existem casos onde é útil imprimir a pilha de execução da função, talvez para responder a clássica pergunta como você chegou nessa parte do código?
Você pode isso fazer usando console.trace()
:
const function2 = () => console.trace()const function1 = () => function2()function1()
Isso irá imprimir a pilha de execução. Isso é o que é impresso se tentarmos usá-lo no REPL do Node.js:
Traceat function2 (repl:1:33)at function1 (repl:1:25)at repl:1:1at ContextifyScript.Script.runInThisContext (vm.js:44:33)at REPLServer.defaultEval (repl.js:239:29)at bound (domain.js:301:14)at REPLServer.runBound [as eval] (domain.js:314:12)at REPLServer.onLine (repl.js:440:10)at emitOne (events.js:120:20)at REPLServer.emit (events.js:210:7)
Calculando o tempo gasto
Você pode calcular facilmente o tempo que uma função gasta para rodar, usando time()
e timeEnd()
const doSomething = () => console.log('test')const measureDoingSomething = () => {console.time('doSomething()')//faça algo, e calcule o tempo que isso levoudoSomething()console.timeEnd('doSomething()')}measureDoingSomething()
stdout e stderr
Como nós vimos o console.log é ótimo para imprimir mensagens no console. Isso é o que chamamos de saída padrão, ou stdout
.
console.error
imprime na stream stderr
.
Isso não vai aparecer no console, mas vai aparecer no log de erro.
Colorindo o saída
Você pode colorir a saída do seu texto no console utilizando escape sequences, que basicamente são um conjunto de caracteres que indentificam uma cor.
Exemplo:
console.log('\x1b[33m%s\x1b[0m', 'hi!')
Você pode testar isso no REPL no Node.js, onde será impresso hi!
em amarelo.
Entretanto, essa é uma abordagem mais baixo nível. O jeito mais simples de colorir saídas no console é utilizando uma biblioteca. Chalk é uma biblioteca que além de colorir, também ajuda com outras facilidades de estilização, como deixar textos em negrito, ítalico ou sublinhados.
Instale com npm install chalk
, e então use-o assim:
const chalk = require('chalk')console.log(chalk.yellow('hi!'))
Usando chalk.yellow
é muito mais conveniente do que tentar lembrar o código de cor correto, e o código fica muito mais legível.
Confira o link do projeto postado acima para mais exemplos de uso.
Crie uma barra de progresso
Progress é um pacote incrível para criar uma barra de progresso no console. Instale utilizando npm install progress
.
Esse trecho cria uma barra de progresso com 10 passos, e a cada 100ms um passo é completado. Quando a barra é completada nós finalizamos o contador.
const ProgressBar = require('progress')const bar = new ProgressBar(':bar', { total: 10 })const timer = setInterval(() => {bar.tick()if (bar.complete) {clearInterval(timer)}}, 100)