Lær, hvordan du bygger et program med en standard kommandolinjegrænseflade ved hjælp af dette nyttige bibliotek.

CLI-applikationer (Command Line Interface) er forenklede tekstbaserede apps, der kører i terminalen for at udføre specifikke opgaver. CLI-applikationer spiller en afgørende rolle i arbejdsgangen for næsten alle udviklere og it-professionelle.

De er for det meste hjælpeværktøjer, der interagerer med operativsystemet eller programmer, der er enten installeret lokalt eller tilgængeligt over internettet for at udføre en opgave i henhold til brugerens input og direktiver.

Forståelse af CLI-applikationer

En kommandolinjegrænseflade lader dig interagere med et program ved at skrive tekstlinjer. Mange CLI-programmer kører forskelligt afhængigt af den kommando, du bruger til at starte dem.

For eksempel, ls-programmet viser filoplysninger og indholdet af mapper. Du kan køre det sådan her:

ls -l /home

Denne kommando inkluderer:

  • Navnet på programmet: ls.
  • En mulighed (eller flag). I dette tilfælde, -l er en mulighed, der er kort for "lang" og producerer mere detaljerede oplysninger.
  • instagram viewer
  • Et skænderi, /home. Her angiver argumentet en sti til den mappe, der skal vises information om.

Mens hvert program kan definere sin egen kommandolinjegrænseflade, er visse elementer almindelige og i bred brug. Du bør følge disse standarder, så en person, der er fortrolig med en kommandolinjegrænseflade, nemt kan bruge dine programmer.

Hvad er Commander.js?

Commander.js er en pakke, der lader dig bygge CLI-apps i Node.js. Den har et rigt bibliotek af funktioner, der lader dig bygge en standard CLI-applikation, der udfører meget af det tunge arbejde. Du skal kun definere kommandoer, muligheder og funktionalitet for din CLI-app.

Ved at kombinere det med andre pakker såsom Chalk.js til styling, kan du hurtigt oprette en fuldt funktionel CLI-app i Node.js.

Opbygning af en CLI-applikation i Node.js ved hjælp af Commander.js

Overvej et eksempel på en CLI-app, urban-cli, som slår betydningen af ​​ord og sociale mediers forkortelser op fra byordbogen. Du lærer, hvordan du opretter CLI'en og udgiver den til npm pakkeregistrering, så andre kan installere det.

Opret en ny mappe og initialiser et nyt Node.js-projekt med følgende kommandoer:

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

Denne CLI vil bruge Axios til at sende HTTP-anmodninger til Urban Dictionary API. Du kan bruge Hurtig API for at kontrollere slutpunkter og se legitimationsoplysninger.

En simpel CLI med en underkommando og hjælp

For at begynde at bygge din CLI skal du installere Commander og Axios med følgende kommando:

npm install commander axios

Opret en ny mappe, beholder, i din projektmappe og en ny tom fil, index.js:

mkdir bin
cd bin
touch index.js

Det beholder (forkortelse for "binær") mappe er vigtig, fordi den indeholder indgangspunktsfilen, som Node kalder, når du kører din CLI. Det index.js fil er denne indgangsfil. Rediger nu filen index.js og begynd at bygge din CLI med Commander.js API.

Først skal du importere program objekt fra Commander:

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

Du vil bruge program objekt for at definere dit programs grænseflade, inklusive underkommandoer, muligheder og argumenter. Objektet har tilsvarende metoder til hver af disse; for at definere en underkommando, brug f.eks kommando metode.

Definer en Find underkommando til CLI til at slå ord op fra Urban Dictionary og tilføje en beskrivelse til det ved hjælp af koden nedenfor:

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

Dette registrerer en Find kommando, som forventer et ord efter sig, og en beskrivelse af det. Brugen af ​​vinkelparenteser betyder, at ordet er et påkrævet argument; brug i stedet firkantede parenteser ([]) for at gøre det valgfrit.

Du bør tilføje en beskrivelse, fordi Commander.js bruger den til at generere hjælpetekst. Når du kører applikationen med Hjælp kommando, får du en standardbrugsvejledning.

For at teste dette skal du tilføje følgende:

program.parse()

Kør derefter programmet og send det videre Hjælp kommando for at få output nedenfor:

Sådan vil enhver standard CLI-applikation vise sin hjælp til brugerne, og med Commander behøver du ikke at bekymre dig om at oprette den selv. Det -h og --Hjælp indstillinger er nyttige til at kontrollere brugsvejledningen for en kommando.

Definering af muligheder og forberedelse af det endelige program

Du definerer også en mulighed ved at sammenkæde mulighed metode til kommandodefinitionen.

Sådan definerer du en mulighed for at inkludere eksempler i definitionerne af ord:

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

Og her er, hvordan du definerer en indstilling, der angiver antallet af definitioner, der skal returneres:

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

Det mulighed metode accepterer to strengparametre, en for indstillingens navn (både korte og lange former), og den anden for dens beskrivelse. Det ekstra [beløb] argument i tælle option er værdien for antallet af definitioner, der skal vises.

Nu er den sidste metode at tilføje handling metode. Du vil implementere Find kommandoens funktionalitet inden for denne metode. Tilføj det til kæden, så din kode nu ser sådan ud:

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 denne opsætning er her hvad en kommando skal få tre definitioner af lol med eksempler vil se sådan ud:

urbanary-cli find lol -e -c 3

Eller ved at bruge den lange form for hver mulighed:

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

Tjek ud Kommandørens npm-side for at lære mere om det, og hvordan du tilpasser dets funktioner til dine forskellige brugssager.

Implementering af programmets funktionalitet

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

const axios = require('axios');

Derefter i funktionslegemet af handlingparameter, kan du implementere logikken til at fremsætte anmodninger til Urban Dictionary og vise resultater i henhold til dine muligheder.

Start med at definere din anmodning:

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

Foretag derefter anmodningen til API'et ved hjælp af 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 egenskab, du har brug for fra svardataene, er liste egenskab, som rummer definitioner og eksempler.

Stadig i prøve blokere, tilføj denne logik for at håndtere muligheder og vise resultaterne 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 kode evaluerer kommandoargumenterne ved hjælp af if-else-sætninger for at bestemme, hvordan outputtet skal vises. Hvis eksempel og tælle muligheder er bestået, det itererer igennem wordData og udskriver det angivne antal definitioner og eksempler med dem.

Hvis du kun består tælle, viser den mængden af ​​definitioner uden eksempler. Hvis du kun består eksempel, viser den én definition med en eksempelsætning. Det andet statement er standardadfærden til kun at udskrive definitionen, hvis du ikke passerer nogen indstillinger.

Applikationen er nu klar, så næste trin er at gøre den eksekverbar. Start med at tilføje en shebang linje til begyndelsen af ​​din bin/index.js-fil, så du kan køre den som et selvstændigt script:

#!/usr/bin/env node

Åbn derefter din package.json fil, skal du redigere værdien af vigtigste ejendom, og tilføj en beholder ejendom efter det sådan her:

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

Nøglen urban-cli, under beholder er den kommando, du skal indtaste i din terminal for at køre din applikation. Så sørg for at bruge et passende navn der, når du bygger dine kommandolinjeapplikationer.

Løb npm installer -g for at installere applikationen globalt, og du vil være i stand til at udføre applikationen som en kommando fra din terminal.

Billedet nedenfor viser installationsprocessen og en testkommando til at finde betydningen af lmk:

Du kan også publicere det til npm-pakkeregistret ved at køre npm udgive i terminalen i projektbiblioteket. Dette gør det kan installeres af alle, uanset hvor de bruger npm installere.

Det er nemmere at bygge og publicere din applikation med Node.js, sammenlignet med når du bygge CLI'er med teknologier som Rust.

Byg funktionelle CLI-applikationer med Node.js

Uanset om du arbejder på en npm-pakke og har brug for et CLI-værktøj til at ledsage den, eller du bare vil bygge et værktøj til at forbedre din arbejdsgang som udvikler. Du har alt hvad du behøver for at føre din idé ud i livet med Node.js Commander-pakken.

Du kan også gå længere ved at bruge andre biblioteker til at skabe forbedrede CLI-oplevelser til dine applikationer, Node.js er robust nok til at tjene dine formål uden meget besvær.