🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Output sulla linea di comando usando Node.js

Codegrind TeamNov 22 2023

Output di base utilizzando il modulo console

Node.js fornisce un modulo console che offre molti modi molto utili per interagire con la riga di comando.

È fondamentalmente lo stesso oggetto console che trovi nel browser.

Il metodo più di base e più utilizzato è console.log(), che stampa la stringa che gli passi alla console.

Se gli passi un oggetto, lo renderà come una stringa.

Puoi passare più variabili a console.log, ad esempio:

const x = "x";
const y = "y";
console.log(x, y);

e Node.js stamperà entrambi.

Possiamo anche formattare frasi in modo carino passando variabili e un formato specifico.

Ad esempio:

console.log("Il mio %s ha %d orecchie", "gatto", 2);
  • %s formatta una variabile come una stringa
  • %d formatta una variabile come un numero
  • %i formatta una variabile come la sua parte intera
  • %o formatta una variabile come un oggetto

Esempio:

console.log("%o", Number);

Cancellare la console

console.clear() cancella la console (il comportamento potrebbe dipendere dalla console utilizzata).

Conteggio degli elementi

console.count() è un metodo utile.

Prendi questo codice:

const x = 1;
const y = 2;
const z = 3;

console.count(
  "Il valore di x è " + x + " ed è stato controllato... quante volte?"
);

console.count(
  "Il valore di x è " + x + " ed è stato controllato... quante volte?"
);

console.count(
  "Il valore di y è " + y + " ed è stato controllato... quante volte?"
);

Quello che succede è che console.count() conta il numero di volte che viene stampata una stringa e stampa il conteggio accanto ad essa:

Puoi contare solo mele e arance:

const arance = ["arancia", "arancia"];
const mele = ["solo una mela"];

arance.forEach((frutto) => {
  console.count(frutto);
});
mele.forEach((frutto) => {
  console.count(frutto);
});

Ripristino del conteggio

Il metodo console.countReset() resetta il contatore utilizzato con console.count().

Useremo l’esempio di mele e arance per dimostrarlo.

const arance = ["arancia", "arancia"];
const mele = ["solo una mela"];

arance.forEach((frutto) => {
  console.count(frutto);
});
mele.forEach((frutto) => {
  console.count(frutto);
});

console.countReset("arancia");

arance.forEach((frutto) => {
  console.count(frutto);
});

Nota come la chiamata a console.countReset('arancia') resetta il contatore al valore zero.

Stampare la traccia dello stack

Potrebbe esserci il caso in cui sia utile stampare la traccia dello stack di una funzione, forse per rispondere alla domanda come hai raggiunto quella parte del codice?

Puoi farlo usando console.trace():

const funzione2 = () => console.trace();
const funzione1 = () => funzione2();
funzione1();

Questo stamperà la traccia dello stack. Questo è ciò che viene stampato se proviamo questo nel REPL di 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)

Calcolare il tempo impiegato

Puoi facilmente calcolare quanto tempo impiega una funzione per eseguire, usando time() e timeEnd()

const fareQualcosa = () => console.log("test");
const misuraFareQualcosa = () => {
  console.time("fareQualcosa()");
  // fai qualcosa e misura il tempo che ci vuole
  fareQualcosa();
  console.timeEnd("fareQualcosa()");
};
misuraFareQualcosa();

stdout e stderr

Come abbiamo visto console.log è ottimo per stampare messaggi nella Console. Questo è ciò che viene chiamato l’output standard, o stdout.

console.error stampa sul flusso stderr.

Non apparirà nella console, ma apparirà nel log degli errori.

Colorare l’output

Puoi colorare l’output del tuo testo nella console usando sequenze di escape. Una sequenza di escape è un insieme di caratteri che identifica un colore.

Esempio:

console.log("\x1b[33m%s\x1b[0m", "ciao!");

Puoi provare questo nel REPL di Node.js, e stamperà ciao! in giallo.

Tuttavia, questa è la modalità a basso livello per farlo. Il modo più semplice per colorare l’output della console è utilizzare una libreria. Chalk è una tale libreria e, oltre a colorare, aiuta anche con altre facilità di formattazione, come rendere il testo grassetto, corsivo o sottolineato.

Lo installi con npm install chalk, poi puoi usarlo:

const chalk = require("chalk");

console.log(chalk.yellow("ciao!"));

Usare chalk.yellow è molto più comodo che cercare di ricordare i codici di escape, e il codice è molto più leggibile.

Controlla il link del progetto sopra per ulteriori esempi di utilizzo.

Creare una barra di avanzamento

Progress è un pacchetto fantastico per creare una barra di avanzamento nella console. Installalo con npm install progress.

Questo frammento crea una barra di avanzamento a 10 passi, e ogni 100 ms viene completato un passo. Quando la barra si completa, cancelliamo l’intervallo:

const ProgressBar = require("progress");

const bar = new ProgressBar(":bar", { total: 10 });
const timer = setInterval(() => {
  bar.tick();
  if (bar.complete) {
    clearInterval(timer);
  }
}, 100);