Leer hoe u een programma kunt bouwen met een standaard opdrachtregelinterface met behulp van deze handige bibliotheek.
CLI-applicaties (Command Line Interface) zijn simplistische, op tekst gebaseerde apps die in de terminal worden uitgevoerd om specifieke taken uit te voeren. CLI-applicaties spelen een cruciale rol in de workflow van vrijwel elke ontwikkelaar en IT-professional.
Het zijn meestal hulpprogramma's die communiceren met het besturingssysteem of met applicaties die dat ook zijn lokaal geïnstalleerd of beschikbaar via internet om een taak uit te voeren op basis van de invoer van de gebruiker richtlijnen.
CLI-toepassingen begrijpen
Met een opdrachtregelinterface kunt u met een programma communiceren door regels tekst te typen. Veel CLI-programma's werken anders, afhankelijk van de opdracht die u gebruikt om ze te starten.
Bijvoorbeeld, het ls-programma geeft bestandsinformatie weer en de inhoud van mappen. Je zou het als volgt kunnen uitvoeren:
ls -l /home
Deze opdracht omvat:
- De naam van het programma: ls.
- Een optie (of vlag). In dit geval, -l is een optie die een afkorting is voor "lang" en meer gedetailleerde informatie oplevert.
- Een argument, /home. Hier specificeert het argument een pad naar de map waarvoor informatie moet worden weergegeven.
Hoewel elk programma zijn eigen opdrachtregelinterface kan definiëren, zijn bepaalde elementen gebruikelijk en worden deze op grote schaal gebruikt. U moet deze normen volgen, zodat iemand die bekend is met een opdrachtregelinterface uw programma's gemakkelijk kan gebruiken.
Wat is Commander.js?
Commander.js is een pakket waarmee u CLI-apps kunt bouwen in Node.js. Het heeft een rijke bibliotheek met functies waarmee u een standaard CLI-toepassing kunt bouwen, waarmee u een groot deel van het zware werk kunt uitvoeren. U hoeft alleen opdrachten, opties en functionaliteit voor uw CLI-app te definiëren.
Door het te combineren met andere pakketten zoals Chalk.js voor styling, kunt u snel een volledig functionele CLI-app maken in Node.js.
Een CLI-applicatie bouwen in Node.js met behulp van Commander.js
Overweeg een voorbeeld van een CLI-app, urbanary-cli, waarin de betekenis van woorden en afkortingen van sociale media wordt opgezocht het Stedelijk Woordenboek. U leert hoe u de CLI maakt en publiceert naar de npm pakketregister zodat anderen het kunnen installeren.
Maak een nieuwe map en initialiseer een nieuw Node.js-project met de volgende opdrachten:
mkdir urbanary-cli
cd urbanary-cli
npm init -y
Deze CLI zal gebruiken Axios om HTTP-verzoeken te verzenden naar de Urban Dictionary-API. Je kunt gebruiken Snelle API om eindpunten te controleren en inloggegevens te bekijken.
Een eenvoudige CLI met een subopdracht en hulp
Om te beginnen met het bouwen van uw CLI, installeert u Commander en Axios met de volgende opdracht:
npm install commander axios
Maak een nieuwe folder, bak, in uw projectmap en een nieuw leeg bestand, index.js:
mkdir bin
cd bin
touch index.js
De bak (afkorting van "binary") is belangrijk omdat deze het toegangspuntbestand bevat dat Node aanroept wanneer u uw CLI uitvoert. De index.js bestand is dit toegangspuntbestand. Bewerk nu het index.js-bestand en begin met het bouwen van uw CLI met de Commander.js API.
Importeer eerst het programma object van commandant:
const { program } = require('commander');
Je gebruikt de programma object om de interface van uw programma te definiëren, inclusief subopdrachten, opties en argumenten. Het object heeft voor elk hiervan overeenkomstige methoden; Om bijvoorbeeld een subopdracht te definiëren, gebruikt u de commando methode.
Definieer een vinden subopdracht voor de CLI om woorden uit Urban Dictionary op te zoeken en er een beschrijving aan toe te voegen met behulp van de onderstaande code:
// index.js
program
.command('find ' )
.description('find meaning of a word or abbreviation or slang')
Dit registreert een vinden commando, dat een woord erna verwacht, en een beschrijving ervoor. Het gebruik van punthaken geeft aan dat het woord een verplicht argument is; gebruik in plaats daarvan vierkante haakjes ([]) om het optioneel te maken.
U moet een beschrijving toevoegen omdat Commander.js deze gebruikt om helptekst te genereren. Wanneer u de toepassing uitvoert met de hulp commando, krijgt u een standaard gebruikershandleiding.
Om dit te testen, voegt u het volgende toe:
program.parse()
Voer vervolgens het programma uit en geef het door hulp commando om de onderstaande uitvoer te krijgen:
Dit is hoe elke standaard CLI-toepassing zijn hulp aan gebruikers zal tonen en met Commander hoeft u zich geen zorgen te maken over het zelf maken ervan. De -H En --hulp opties zijn handig voor het controleren van de gebruikershandleiding voor een opdracht.
Opties definiëren en het definitieve programma voorbereiden
U definieert ook een optie door de keuze methode toe aan de opdrachtdefinitie.
Zo definieert u een optie om voorbeelden op te nemen in de definities van woorden:
program.option('-e, --example', "Display examples")
En zo definieert u een optie die het aantal definities specificeert dat moet worden geretourneerd:
program.option(
'-c, --count [amount]',
'amount of definitions to display (max is 10)'
)
De keuze methode accepteert twee stringparameters, één voor de naam van de optie (zowel korte als lange vormen), en de andere voor de beschrijving ervan. De extra [hoeveelheid] betoog in de graaf optie is de waarde voor het aantal definities dat moet worden weergegeven.
De laatste methode om toe te voegen is de actie methode. Je implementeert de vinden commando's functionaliteit binnen deze methode. Voeg het toe aan de keten zodat je code er nu als volgt uitziet:
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) => {});
Met deze opstelling is hier een opdracht om drie definities van te krijgen lol met voorbeelden ziet er als volgt uit:
urbanary-cli find lol -e -c 3
Of gebruik de lange vorm van elke optie:
urbanary-cli find lol --example --count 3
Uitchecken Commander's npm-pagina voor meer informatie en hoe u de functies kunt aanpassen aan uw verschillende gebruiksscenario's.
Implementatie van de functionaliteit van het programma
Importeer eerst Axios in uw index.js bestand als volgt:
const axios = require('axios');
Vervolgens in de functietekst van actie's parameter, kunt u de logica implementeren om verzoeken in te dienen bij Urban Dictionary en resultaten weer te geven op basis van uw opties.
Begin met het definiëren van uw verzoek:
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'
}
}
Doe vervolgens het verzoek aan de API met behulp van Axios met de volgende code:
try {
let resp = await axios.request(requestOptions);
console.log(`Definitions for ${word} fetched`);
wordData = resp.data.list;
} catch (err) {
console.error(err.message)
}
De enige eigenschap die u nodig hebt uit de antwoordgegevens is de lijst eigenschap die definities en voorbeelden bevat.
Nog steeds in de poging blok, voeg deze logica toe om opties te verwerken en de resultaten als volgt weer te geven:
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}`);
}
Deze code evalueert de opdrachtargumenten met behulp van if-else-instructies om te bepalen hoe de uitvoer moet worden weergegeven. Als de voorbeeld En graaf opties worden doorgegeven, itereert het door woordGegevens en drukt het opgegeven aantal definities en voorbeelden ermee af.
Als je alleen maar slaagt graaf, het geeft dat aantal definities weer zonder voorbeelden. Als je alleen maar slaagt voorbeeld, wordt één definitie weergegeven met een voorbeeldzin. De anders statement is het standaardgedrag om alleen de definitie af te drukken als u geen opties doorgeeft.
De applicatie is nu klaar, dus de volgende stap is om deze uitvoerbaar te maken. Begin met toevoegen een shebang-lijn naar het begin van uw bin/index.js-bestand, zodat u het als een zelfstandig script kunt uitvoeren:
#!/usr/bin/env node
Open vervolgens uw pakket.json bestand, bewerk de waarde van het voornaamst eigendom, en voeg een toe bak eigendom erna als volgt:
"main": "./bin/index.js",
"bin": {
"urbanary-cli": "./bin/index.js"
},
De sleutel urbanair-cli, onder bak is de opdracht die u in uw terminal invoert om uw toepassing uit te voeren. Zorg er dus voor dat u daar een passende naam gebruikt bij het bouwen van uw opdrachtregeltoepassingen.
Loop npm installatie -g om de applicatie wereldwijd te installeren, en u kunt de applicatie uitvoeren als een opdracht vanaf uw terminal.
De onderstaande afbeelding toont het installatieproces en een testcommando om de betekenis ervan te achterhalen Ik:
U kunt het ook publiceren naar het npm-pakketregister door het uit te voeren npm publiceren in de terminal in de projectmap. Hierdoor kan het door iedereen, waar dan ook, worden geïnstalleerd npm installeren.
Het is eenvoudiger om uw applicatie te bouwen en publiceren met Node.js, vergeleken met wanneer u dat doet bouw CLI's met technologieën zoals Rust.
Bouw functionele CLI-applicaties met Node.js
Of u nu aan een npm-pakket werkt en daarbij een CLI-hulpprogramma nodig heeft, of gewoon een tool wilt bouwen om uw workflow als ontwikkelaar te verbeteren. Met het Node.js Commander-pakket heeft u alles wat u nodig heeft om uw idee tot leven te brengen.
U kunt ook verder gaan door andere bibliotheken te gebruiken om verbeterde CLI-ervaringen voor uw applicaties te creëren. Node.js is robuust genoeg om zonder veel gedoe aan uw doeleinden te voldoen.