Scopri come creare un programma con un'interfaccia a riga di comando standard utilizzando questa utile libreria.
Le applicazioni CLI (Command Line Interface) sono semplici app basate su testo che vengono eseguite nel terminale per completare attività specifiche. Le applicazioni CLI svolgono un ruolo cruciale nel flusso di lavoro di quasi tutti gli sviluppatori e professionisti IT.
Sono per lo più strumenti di utilità che interagiscono con il sistema operativo o con le applicazioni che lo sono installato localmente o disponibile su Internet per eseguire un'attività in base all'input dell'utente e direttive.
Comprendere le applicazioni CLI
Un'interfaccia a riga di comando ti consente di interagire con un programma digitando righe di testo. Molti programmi CLI vengono eseguiti in modo diverso a seconda del comando utilizzato per avviarli.
Per esempio, il programma ls visualizza le informazioni sul file e il contenuto delle directory. Potresti eseguirlo in questo modo:
ls -l /home
Questo comando include:
- Il nome del programma: ls.
- Un'opzione (o flag). In questo caso, -l è un'opzione che è l'abbreviazione di "lungo" e produce informazioni più dettagliate.
- Un argomento, /home. Qui, l'argomento specifica un percorso alla directory per cui mostrare le informazioni.
Sebbene ogni programma possa definire la propria interfaccia della riga di comando, alcuni elementi sono comuni e ampiamente utilizzati. Dovresti seguire questi standard in modo che qualcuno che abbia familiarità con un'interfaccia a riga di comando possa utilizzare facilmente i tuoi programmi.
Cos'è Commander.js?
Commander.js lo è un pacchetto che ti consente di creare app CLI in Node.js. Dispone di una ricca libreria di funzionalità che ti consentono di creare un'applicazione CLI standard, svolgendo gran parte del lavoro pesante. Devi solo definire comandi, opzioni e funzionalità per la tua app CLI.
Combinandolo con altri pacchetti come Chalk.js per lo styling, puoi creare rapidamente un'app CLI completamente funzionale in Node.js.
Creazione di un'applicazione CLI in Node.js utilizzando Commander.js
Considera un'app CLI di esempio, urbano-cli, da cui cerca il significato delle parole e delle abbreviazioni dei social media il Dizionario Urbano. Imparerai come creare la CLI e pubblicarla su npm registro dei pacchetti in modo che altri possano installarlo.
Crea una nuova cartella e inizializza un nuovo progetto Node.js con i seguenti comandi:
mkdir urbanary-cli
cd urbanary-cli
npm init -y
Questa CLI utilizzerà Axios per inviare richieste HTTP all'API Urban Dictionary. Puoi usare API rapida per controllare gli endpoint e visualizzare le credenziali.
Una CLI semplice con un sottocomando e una guida
Per iniziare a costruire la tua CLI, installa Commander e Axios con il seguente comando:
npm install commander axios
Crea una nuova cartella, bidone, nella directory del tuo progetto e un nuovo file vuoto, indice.js:
mkdir bin
cd bin
touch index.js
IL bidone (abbreviazione di "binary") è importante perché contiene il file del punto di ingresso che Node chiama quando esegui la CLI. IL indice.js file è questo file del punto di ingresso. Ora modifica il file index.js e inizia a creare la tua CLI con l'API Commander.js.
Innanzitutto, importa il file programma oggetto del comandante:
const { program } = require('commander');
Utilizzerai il programma oggetto per definire l'interfaccia del tuo programma, inclusi sottocomandi, opzioni e argomenti. L'oggetto ha metodi corrispondenti per ciascuno di questi; ad esempio, per definire un sottocomando, utilizzare il comando comando metodo.
Definire a Trovare sottocomando per la CLI per cercare parole da Urban Dictionary e aggiungerne una descrizione utilizzando il codice seguente:
// index.js
program
.command('find ' )
.description('find meaning of a word or abbreviation or slang')
Questo registra a Trovare comando, che prevede una parola dopo e una sua descrizione. L'uso delle parentesi angolari significa che la parola è un argomento obbligatorio; utilizzare invece le parentesi quadre ([]) per renderlo facoltativo.
Dovresti aggiungere una descrizione perché Commander.js la utilizza per generare testo di aiuto. Quando esegui l'applicazione con il file aiuto comando, otterrai una guida all'utilizzo standard.
Per testarlo, aggiungi quanto segue:
program.parse()
Quindi esegui il programma e passagli il file aiuto comando per ottenere l'output seguente:
Questo è il modo in cui qualsiasi applicazione CLI standard mostrerà il suo aiuto agli utenti e, con Commander, non devi preoccuparti di crearla tu stesso. IL -H E --aiuto le opzioni sono utili per verificare la guida all'uso di un comando.
Definizione delle opzioni e preparazione del programma finale
Puoi anche definire un'opzione concatenando il file opzione metodo alla definizione del comando.
Ecco come definire un'opzione per includere esempi nelle definizioni delle parole:
program.option('-e, --example', "Display examples")
Ed ecco come definire un'opzione specificando il numero di definizioni da restituire:
program.option(
'-c, --count [amount]',
'amount of definitions to display (max is 10)'
)
IL opzione Il metodo accetta due parametri stringa, uno per il nome dell'opzione (sia in forma breve che lunga) e l'altro per la sua descrizione. L'extra [quantità] argomento nel contare opzione è il valore per il numero di definizioni da visualizzare.
Ora, l'ultimo metodo da aggiungere è il file azione metodo. Implementerai il Trovare funzionalità del comando all'interno di questo metodo. Aggiungilo alla catena in modo che il tuo codice ora assomigli a questo:
program
.command('find ' )
.description('find meaning of a word or abbreviation or slang')
.option('-e, --example', "Display examples")
.option(
'-c, --count [amount]',
'amount of definitions to display (max is 10)'
)
.action(async (word, options) => {});
Con questa configurazione, ecco di cosa si può ottenere un comando in tre definizioni lol con esempi sarà simile a:
urbanary-cli find lol -e -c 3
Oppure, utilizzando la forma lunga di ciascuna opzione:
urbanary-cli find lol --example --count 3
Guardare Pagina npm del comandante per saperne di più e su come adattare le sue funzioni ai diversi casi d'uso.
Implementazione delle funzionalità del programma
Innanzitutto, importa Axios nel tuo indice.js archiviare come segue:
const axios = require('axios');
Quindi, nel corpo della funzione di azione's, puoi implementare la logica per effettuare richieste a Urban Dictionary e visualizzare i risultati in base alle tue opzioni.
Inizia definendo la tua richiesta:
let requestOptions = {
method: 'GET',
URL: "https://mashape-community-urban-dictionary.p.rapidapi.com/define",
params: { term: word },
headers: {
'X-RapidAPI-Key': YOUR_RAPID_API_KEY,
'X-RapidAPI-Host': 'mashape-community-urban-dictionary.p.rapidapi.com'
}
}
Quindi effettuare la richiesta all'API utilizzando Axios con il seguente codice:
try {
let resp = await axios.request(requestOptions);
console.log(`Definitions for ${word} fetched`);
wordData = resp.data.list;
} catch (err) {
console.error(err.message)
}
L'unica proprietà di cui hai bisogno dai dati di risposta è the elenco proprietà che contiene definizioni ed esempi.
Ancora nel Tentativo blocco, aggiungi questa logica per gestire le opzioni e visualizzare i risultati come segue:
if (options.example && options.count) {
let cnt = 1;
let definitions = wordData.slice(0, options.count);definitions.forEach((elem) => {
console.log(`Definition ${cnt++}: ${elem.definition}`);
console.log(`Example:\n${elem.example}\n`);
});
} elseif (options.count && !options.example) {
let cnt = 1;
let definitions = wordData.slice(0, options.count);
definitions.forEach((elem) => {
console.log(`Definition ${cnt++}: ${elem.definition}`);
});
} elseif (options.example) {
console.log(`Definition: ${wordData[0].definition}`);
console.log(`Example:\n${wordData[0].example}`);
} else {
console.log(`Definition: ${wordData[0].definition}`);
}
Questo codice valuta gli argomenti del comando utilizzando le istruzioni if-else per determinare come visualizzare l'output. Se la esempio E contare le opzioni vengono passate, scorre wordData e stampa con essi il numero specificato di definizioni ed esempi.
Solo se passi contare, mostra quella quantità di definizioni senza esempi. Solo se passi esempio, viene visualizzata una definizione con una frase di esempio. IL altro è il comportamento predefinito per stampare solo la definizione se non passi alcuna opzione.
L'applicazione è ora pronta, quindi il passo successivo è renderla eseguibile. Inizia aggiungendo una linea di Shebang all'inizio del file bin/index.js in modo da poterlo eseguire come script autonomo:
#!/usr/bin/env node
Quindi, apri il tuo pacchetto.json file, modificare il valore del file principale proprietà e aggiungere a bidone proprietà dopo in questo modo:
"main": "./bin/index.js",
"bin": {
"urbanary-cli": "./bin/index.js"
},
Il tasto urbano-cli, Sotto bidone è il comando che inserirai nel terminale per eseguire l'applicazione. Quindi, assicurati di utilizzare un nome adatto quando crei le tue applicazioni a riga di comando.
Correre npm installa -g per installare l'applicazione a livello globale e potrai eseguire l'applicazione come comando dal tuo terminale.
L'immagine seguente mostra il processo di installazione e un comando di prova per trovarne il significato lascia stare:
Puoi anche pubblicarlo nel registro dei pacchetti npm eseguendo npm pubblica nel terminale all'interno della directory del progetto. Ciò lo rende installabile da chiunque, ovunque lo utilizzi installazione npm.
È più semplice creare e pubblicare la tua applicazione con Node.js rispetto a quando tu creare CLI con tecnologie come Rust.
Crea applicazioni CLI funzionali con Node.js
Sia che tu stia lavorando su un pacchetto npm e abbia bisogno di un'utilità CLI per accompagnarlo o che tu voglia semplicemente creare uno strumento per migliorare il tuo flusso di lavoro come sviluppatore. Hai tutto ciò che ti serve per dare vita alla tua idea con il pacchetto Node.js Commander.
Puoi anche andare oltre utilizzando altre librerie per creare esperienze CLI migliorate per le tue applicazioni, Node.js è abbastanza robusto da servire ai tuoi scopi senza troppi problemi.