back to top

Node.js REPL: cos’è e come usarla

Una volta installato Node.js, possiamo iniziare a usarlo lanciando nella shell il seguente comando:

node

Verrà aperta la REPL (Read-Eval-Print-Loop) e verrà mostrato un nuovo prompt (<). A questo punto possiamo digitare del codice javascript che verrà eseguito dopo aver premuto il tasto INVIO.

Semplice esempio Node.js REPL

Il carattere speciale ‘underscore’ (_)

La REPL mette a disposizione una variabile speciale identificata dal carattere underscore (_) che può essere usato per recuperare il risultato dell’ultima espressione eseguita.

Carattere underscore node repl

Il carattere underscore può essere usato anche per invocare un metodo o accedere le proprietà di un oggetto così come mostrato nell’immagine sottostante.

Modalità multilinea

Abbiamo visto che premendo il tasto INVIO, viene eseguito il codice inserito. In realtà, la REPL è abbastanza ‘intelligente’ da capire quando eseguire un’espressione o andare alla linea successiva per consentire l’inserimento del codice su più linee.

inserimento comandi repl multilinea

Come potete notare dall’immagine in alto, il cursore va a capo e resta in attesa che venga inserito il corpo della funzione. Per evidenziare questo comportamento, sulla nuova linea vengono inseriti una sequenza di punti (….). Possiamo quindi completare la nostra funzione inserendo il resto del codice.

Inserimento del codice javascript su diverse linee all'interno della REPL

La REPL resterà in attesa finché non inseriamo la parentesi graffa finale.

Fine modalità multilinea all'interno della REPL

Questa funzionalità può risultare utile se si vuole creare un oggetto o un array e si preferisce digitare le diverse proprietà su più linee per migliorare la leggibilità.

input REPL Node.js su diverse linee

Autocompletamento con il carattere TAB

All’interno della REPL è possibile usare il tasto TAB per completare variabili, funzioni o mostrare l’elenco delle proprietà e metodi disponibili per un certo oggetto, così come mostrato nell’immagine sottostante.

Uso del tasto TAB nella repl per l'autocompletamento

Come potete osservare, abbiamo definito una costante di tipo Stringa. Dopo aver digitato il nome della costante seguito dal carattere punto (.), a bbiamo premuto il tasto tabulazione (TAB). Vengono così mostrati un elenco di metodi e proprietà che è possibile accedere per la costante di tipo Stringa.

L’oggetto global

Un caso particolare si verifica quando si preme il tasto TAB senza inserire nessun altro carattere.

Uso del carattere TAB per visualizzare le proprietà dell'oggetto global

In tale situazione viene mostrata una lista di moduli e funzioni che sono disponibili globalmente in Node.js. Si tratta di tutte le proprietà dell’oggetto global il quale è un oggetto speciale che ricopre un ruolo simile a quello rivestito dall’oggetto window all’interno del browser.

Alcuni moduli funzioni oggetto global Node.js

Comandi utili da usare nella REPL

Una funzionalità interessante della REPL è costituita dalla possibilità di sfogliare le diverse istruzioni digitate durante la sessione corrente utilizzando i tasti freccia SU e freccia GIÙ.

Digitando inoltre il comando .help e premendo il tasto INVIO, vengono elencati dei comandi ‘speciali’ che la REPL è in grado di interpetrare.

Comandi utili della REPL

I comandi .break o .clear permettono di ‘uscire’ dal comando corrente. È anche possibile ottenere lo stesso effetto attraverso la scorciatoia da tastiera CTRL+C.

Uso del comando.clear all'interno della REPL

Digitando .exit (oppure CTRL+D) è possibile terminare la sessione corrente della REPL.

Per salvare e poi ripristinare i comandi digitati durante una sessione, che altrimenti andrebbero persi e non sarebbero più disponibili nelle sessioni successive, si può invece usare .save ‘percorso del file’ e .load ‘percorso del file’.

Comando.save usato nella REPL

Dopo aver digitato il comando dell’immagine in alto, verrà creato sul Desktop un file session_1.js contenente tutte le istruzioni digitate durante la sessione.

Contenuto del file salvato con comando save sessione node repl

A questo punto, se avviamo una nuova sessione ed eseguiamo il comando .load avremo a disposizione tutte le istruzioni della precedente sessione.

Esecuzione comando.load

Infatti possiamo verificare la presenza della funzione creata all’interno dell’oggetto global.

Esempio funzioni oggetto global node repl

Il modulo repl

Node.js fornisce anche un modulo repl che possiamo utilizzare per creare una REPL personalizzata direttamente all’interno della nostra applicazione. Vediamo un semplice esempio. Per maggiori informazioni potete leggere la documentazione ufficiale

const repl = require('repl');

const replServer = repl.start({
  prompt: '$  ',
  ignoreUndefined: true
});

Object.defineProperty(replServer.context, 'v8', {
  configurable: false,
  enumerable: true,
  value: `Versione corrente di V8: ${process.versions.v8}`
});

Object.defineProperty(replServer.context, 'somma', {
  configurable: false,
  enumerable: true,
  value: function somma(a,b){
    return a + b;
  }
});

replServer.on('exit', () => {
  console.log('Grazie per aver usato la Repl. Buona giornata!');
  process.exit();
});

replServer.defineCommand('time', {
  help: 'Mostra l'ora corrente',
  action() {
    const orario = new Date();
    
    let ore = orario.getHours();
    let minuti = orario.getMinutes();
    
    ore = (ore < 10 ? '0' : '') + ore;
    minuti = (minuti < 10 ? '0' : '') + minuti;
    
    console.log('n========== ORARIO ==========n');
    console.log(`           ${ore}:${minuti}n`);
    console.log('============================n');
    
    this.displayPrompt();
  }
});

A questo punto se salviamo il codice mostrato sopra all’interno di un file repl.js, potremo lanciare la nostra REPL personalizzata attraverso il comando:

node repl.js
esecuzione Node.js repl personalizzata

In questo esempio abbiamo creato una REPL personalizzata importando dapprima l’omonimo modulo e invocando il metodo start() a cui abbiamo passato delle opzioni attraverso un semplice oggetto Javascript. Il metodo start() restituisce un’istanza di repl.REPLServer. Nel nostro caso abbiamo cambiato il prompt che verrà mostrato nella nuova REPL e abbiamo chiesto di non mostrare il valore restituito dall’esecuzione di un comando se questo è pari a undefined.

All’interno della nostra REPL abbiamo reso disponibili la variabile v8 che mostrerà a video la versione attuale del motore Javascript e una funzione somma che permetta semplicemente di sommare due valori. Per far ciò abbiamo usato il metodo Object.defineProperty() in modo tale che non possa essere cambiato il valore delle due proprietà dell’oggetto context da noi definite.

Proprietà v8 e somma aggiunte a replServer context

Abbiamo quindi richiesto di stampare un messaggio (‘Grazie per aver usato la Repl. Buona giornata!’) ogni volta che si termina la sessione corrente della REPL.

Messaggio uscita repl personalizzata

Infine abbiamo aggiunto un nuovo comando (‘.time’) che una volta eseguito mostrerà l’ora corrente.

Esempio uso comando personalizzato per la repl in Node.js

Digitando .help nella REPL, verrà mostrato un elenco di comendi che include anche quello aggiunto. Nella descrizione di .time si specifica che il comando serve per mostrare l’ora corrente.

Output del comando.exit per la repl personalizzata con aggiunta del comando.time

Conclusioni

A partire dalla prossima lezione, affronteremo in maniera più approfondita alcuni dei concetti indispensabili per capire il funzionamento dei vari componenti che costituiscono Node.js.

Pubblicitร