Yargs: una utility per gestire l'interfaccia a linea di comando.

Con l'installazione di yargs avremo a disposizione una libreria per il parsing e la gestione avanzata degli argomenti da riga di comando.
Come installare yargs da terminale
npm i yargs
Come importare yargs nella nostra app.
const argv_parsed = require('yargs').argv;
Funzionamento Basilare di Yargs
Proviamo a lanciare da terminale un comando con flag-- nome e valore Donato
node app.js cerca --nome='Donato'

Possiamo quindi vedere che yargs ci restituisce un oggetto contenente
- Una proprietà _
- Un array con al suo interno i comandi lanciati (in questo caso cerca)
- Una proprietà chiave (in questo caso nome)
- Un valore (in questo caso Donato)
Accesso alle proprietà ed ai comandi con yargs
const argv_parsed = require('yargs').argv;
console.log(argv_parsed); // per ottenere l'oggetto _ con l'array contenente i comandi, le proprietà chiave ed i propri valori
console.log(argv_parsed._); // per ottenere i comandi indicati
console.log(argv_parsed.nome); // per accedere al flag nome
console.log(argv_parsed.email); // per accedere al flag nome

Il metodo command di yargs
Per assicurarci di controllare che siano presenti flag specifici per comandi specifici, possiamo usare il metodo command di yargs, con esso infatti potremmo descrivere il comando ed i flag che ci aspettiamo di ricevere. Facciamo un esempio:
const yargs = require('yargs');
// node app.js get -- nome='Donato'
yargs.command({
command: 'get',
describe: 'Ricerca per nome',
builder: {
nome: {
describe: 'nome da ricercare',
demandOption: true,
type: 'string'
}
},
handler(argv) {
console.log(argv);
}
});
yargs.parse();
Come abbiamo specificato che al comando get, corrisponda il flag nome?
- A command() dobbiamo passare in input un oggetto.
- L'oggetto dovrà contenere 4 proprietà:
- command : nome del comando
- describe: descrive il comando
- builder : {contiene a sua volta un oggetto che conterrà a sua volta i flag che ci aspettiamo quando viene lanciato il command appena descritto}
- flag : nome del flag
- describe : descrizione del flag
- demandOption : true (per indicare che obbligatorio), false (non obbligatorio)
- type : la tipologia del flag, ad esempio 'string'
- flag : nome del flag
- handler(argv): questa funzione conterrà al suo interno l'oggetto argv di yargs.
- yargs.parse() : Con questa funzione abiliamo yargs con il metodo parse()
Risultato:
