Lær hvordan du bygger et program med et standard kommandolinjegrensesnitt ved å bruke dette nyttige biblioteket.

CLI-applikasjoner (Command Line Interface) er forenklede tekstbaserte apper som kjører i terminalen for å fullføre spesifikke oppgaver. CLI-applikasjoner spiller en avgjørende rolle i arbeidsflyten til nesten alle utviklere og IT-profesjonelle.

De er for det meste verktøy som samhandler med operativsystemet eller applikasjoner som er enten installert lokalt eller tilgjengelig over internett for å utføre en oppgave i henhold til brukerens input og direktiver.

Forstå CLI-applikasjoner

Et kommandolinjegrensesnitt lar deg samhandle med et program ved å skrive tekstlinjer. Mange CLI-programmer kjører forskjellig avhengig av kommandoen du bruker for å starte dem.

For eksempel, ls-programmet viser filinformasjon og innholdet i kataloger. Du kan kjøre det slik:

ls -l /home

Denne kommandoen inkluderer:

  • Navnet på programmet: ls.
  • Et alternativ (eller flagg). I dette tilfellet, -l er et alternativ som er forkortelse for "long" og produserer mer detaljert informasjon.
  • Et argument, /home. Her spesifiserer argumentet en bane til katalogen for å vise informasjon om.

Mens hvert program kan definere sitt eget kommandolinjegrensesnitt, er visse elementer vanlige og i stor bruk. Du bør følge disse standardene slik at noen som er kjent med et kommandolinjegrensesnitt enkelt kan bruke programmene dine.

Hva er Commander.js?

Commander.js er en pakke som lar deg bygge CLI-apper i Node.js. Den har et rikt bibliotek med funksjoner som lar deg bygge en standard CLI-applikasjon, som utfører mye av det tunge arbeidet. Du trenger bare å definere kommandoer, alternativer og funksjonalitet for CLI-appen din.

Ved å kombinere den med andre pakker som Chalk.js for styling, kan du raskt lage en fullt funksjonell CLI-app i Node.js.

Bygge en CLI-applikasjon i Node.js ved å bruke Commander.js

Tenk på et eksempel på en CLI-app, urban-cli, som slår opp betydningen av ord og sosiale medier-forkortelser fra Urban Dictionary. Du lærer hvordan du oppretter CLI og publiserer den til npm pakkeregisteret slik at andre kan installere det.

Opprett en ny mappe og initialiser et nytt Node.js-prosjekt med følgende kommandoer:

mkdir urbanary-cli
cd urbanary-cli
npm init -y

Denne CLI vil bruke Axios for å sende HTTP-forespørsler til Urban Dictionary API. Du kan bruke Rask API for å sjekke endepunkter og se legitimasjon.

En enkel CLI med en underkommando og hjelp

For å begynne å bygge din CLI, installer Commander og Axios med følgende kommando:

npm install commander axios

Lag en ny mappe, bin, i prosjektkatalogen og en ny tom fil, index.js:

mkdir bin
cd bin
touch index.js

De bin (forkortelse for "binær") mappe er viktig fordi den inneholder inngangspunktfilen som Node kaller når du kjører CLI. De index.js filen er denne inngangspunktfilen. Nå, rediger index.js-filen og begynn å bygge CLI-en din med Commander.js API.

Først importerer du program objekt fra Commander:

const { program } = require('commander');

Du vil bruke program objekt for å definere programmets grensesnitt, inkludert underkommandoer, alternativer og argumenter. Objektet har tilsvarende metoder for hver av disse; for å definere en underkommando, bruk for eksempel kommando metode.

Definer a finne underkommando for CLI å slå opp ord fra Urban Dictionary og legge til en beskrivelse for det ved å bruke koden nedenfor:

// index.js
program
.command('find ')
.description('find meaning of a word or abbreviation or slang')

Dette registrerer en finne kommando, som forventer et ord etter det, og en beskrivelse av det. Bruken av vinkelparenteser betyr at ordet er et nødvendig argument; bruk firkantede parenteser i stedet ([]) for å gjøre det valgfritt.

Du bør legge til en beskrivelse fordi Commander.js bruker den til å generere hjelpetekst. Når du kjører applikasjonen med hjelp kommando, får du en standard bruksveiledning.

For å teste dette, legg til følgende:

program.parse()

Kjør deretter programmet og send det hjelp kommando for å få utdataene nedenfor:

Dette er hvordan enhver standard CLI-applikasjon vil vise sin hjelp til brukere, og med Commander trenger du ikke å bekymre deg for å lage den selv. De -h og --hjelp alternativer er nyttige for å sjekke bruksveiledningen for en kommando.

Definere alternativer og forberede det endelige programmet

Du definerer også et alternativ ved å lenke sammen alternativ metoden til kommandodefinisjonen.

Slik definerer du et alternativ for å inkludere eksempler i definisjonene av ord:

program.option('-e, --example', "Display examples")

Og her er hvordan du definerer et alternativ som spesifiserer antall definisjoner som skal returneres:

program.option(
'-c, --count [amount]',
'amount of definitions to display (max is 10)'
)

De alternativ metoden godtar to strengparametere, en for alternativets navn (både korte og lange former), og den andre for beskrivelsen. Det ekstra [beløp] argument i telle alternativet er verdien for antall definisjoner som skal vises.

Nå er den siste metoden å legge til handling metode. Du vil implementere finne kommandoens funksjonalitet innenfor denne metoden. Legg den til i kjeden slik at koden din nå ser slik ut:

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) => {});

Med dette oppsettet, her er en kommando å få tre definisjoner av lol med eksempler vil se slik ut:

urbanary-cli find lol -e -c 3

Eller bruk den lange formen for hvert alternativ:

urbanary-cli find lol --example --count 3

Sjekk ut Kommandørens npm-side for å lære mer om det og hvordan du tilpasser dets funksjoner for dine forskjellige brukstilfeller.

Implementering av programmets funksjonalitet

Først importerer du Axios til din index.js fil som følger:

const axios = require('axios');

Deretter, i funksjonskroppen til handlingparameter, kan du implementere logikken for å sende forespørsler til Urban Dictionary og vise resultater i henhold til alternativene dine.

Begynn med å definere forespørselen din:

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'
}
}

Send deretter forespørselen til API ved å bruke Axios med følgende kode:

try {
let resp = await axios.request(requestOptions);
console.log(`Definitions for ${word} fetched`);
wordData = resp.data.list;
} catch (err) {
console.error(err.message)
}

Den eneste egenskapen du trenger fra svardataene er liste egenskap som inneholder definisjoner og eksempler.

Fortsatt i prøve blokkere, legg til denne logikken for å håndtere alternativer og vise resultatene som følger:

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}`);
}

Denne koden evaluerer kommandoargumentene ved å bruke if-else-setninger for å bestemme hvordan utdataene skal vises. Hvis eksempel og telle alternativer er bestått, det itererer gjennom wordData og skriver ut det angitte antallet definisjoner og eksempler med dem.

Hvis du bare består telle, viser den den mengden definisjoner uten eksempler. Hvis du bare består eksempel, viser den én definisjon med en eksempelsetning. De ellers statement er standard oppførsel for å skrive ut bare definisjonen hvis du ikke passerer noen alternativer.

Applikasjonen er nå klar, så neste trinn er å gjøre den kjørbar. Start med å legge til en shebang-linje til begynnelsen av bin/index.js-filen, slik at du kan kjøre den som et frittstående skript:

#!/usr/bin/env node

Deretter åpner du din package.json fil, rediger verdien av hoved- eiendom, og legg til en bin eiendom etter det slik:

"main": "./bin/index.js",
"bin": {
"urbanary-cli": "./bin/index.js"
},

Nøkkelen urban-cli, under bin er kommandoen du skriver inn i terminalen for å kjøre applikasjonen. Så pass på å bruke et passende navn der når du bygger kommandolinjeapplikasjonene dine.

Løpe npm installer -g for å installere applikasjonen globalt, og du vil kunne kjøre applikasjonen som en kommando fra terminalen din.

Bildet nedenfor viser installasjonsprosessen og en testkommando for å finne betydningen av lmk:

Du kan også publisere det til npm-pakkeregisteret ved å kjøre npm publisere i terminalen i prosjektkatalogen. Dette gjør det installerbart av alle fra hvor som helst som bruker npm installere.

Det er enklere å bygge og publisere applikasjonen din med Node.js, sammenlignet med når du bygge CLI-er med teknologier som Rust.

Bygg funksjonelle CLI-applikasjoner med Node.js

Enten du jobber med en npm-pakke og trenger et CLI-verktøy for å følge den, eller du bare vil bygge et verktøy for å forbedre arbeidsflyten din som utvikler. Du har alt du trenger for å bringe ideen din til live med Node.js Commander-pakken.

Du kan også gå lenger ved å bruke andre biblioteker for å skape forbedrede CLI-opplevelser for applikasjonene dine, Node.js er robust nok til å tjene dine formål uten mye problemer.