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 = 1
const y = 2
const z = 3
console.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:

Trace
at function2 (repl:1:33)
at function1 (repl:1:25)
at repl:1:1
at 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 levou
doSomething()
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)