Aflați cum să construiți un program cu o interfață standard de linie de comandă folosind această bibliotecă utilă.

Aplicațiile CLI (Command Line Interface) sunt aplicații simpliste bazate pe text care rulează în terminal pentru a finaliza sarcini specifice. Aplicațiile CLI joacă un rol crucial în fluxul de lucru al aproape fiecărui dezvoltator și profesionist IT.

Acestea sunt în mare parte instrumente utilitare care interacționează cu sistemul de operare sau aplicații care sunt fie instalat local sau disponibil pe internet pentru a efectua o sarcină în funcție de intrarea utilizatorului și directive.

Înțelegerea aplicațiilor CLI

O interfață de linie de comandă vă permite să interacționați cu un program tastând linii de text. Multe programe CLI rulează diferit, în funcție de comanda pe care o utilizați pentru a le porni.

De exemplu, programul ls afișează informații despre fișier și conținutul directoarelor. S-ar putea să o rulați astfel:

ls -l /home

Această comandă include:

  • Numele programului: ls.
  • instagram viewer
  • O opțiune (sau steag). În acest caz, -l este o opțiune care este prescurtare pentru „lung” și produce informații mai detaliate.
  • Un argument, /home. Aici, argumentul specifică o cale către directorul pentru care să se afișeze informații.

Deși fiecare program își poate defini propria interfață de linie de comandă, anumite elemente sunt comune și sunt utilizate pe scară largă. Ar trebui să urmați aceste standarde, astfel încât cineva care este familiarizat cu o interfață de linie de comandă să poată utiliza cu ușurință programele dvs.

Ce este Commander.js?

Commander.js este un pachet care vă permite să creați aplicații CLI în Node.js. Are o bibliotecă bogată de caracteristici care vă permit să construiți o aplicație CLI standard, realizând o mare parte din munca grea. Trebuie doar să definiți comenzi, opțiuni și funcționalități pentru aplicația dvs. CLI.

Combinând-o cu alte pachete, cum ar fi Chalk.js pentru stil, puteți crea rapid o aplicație CLI complet funcțională în Node.js.

Crearea unei aplicații CLI în Node.js folosind Commander.js

Luați în considerare un exemplu de aplicație CLI, urbanary-cli, care caută sensul cuvintelor și abrevierilor rețelelor sociale din Dicționarul Urban. Veți învăța cum să creați CLI și să îl publicați în npm registrul pachetelor, astfel încât alții să îl poată instala.

Creați un folder nou și inițializați un nou proiect Node.js cu următoarele comenzi:

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

Acest CLI va folosi Axios pentru a trimite cereri HTTP la API-ul Urban Dictionary. Poți să folosești Rapid API pentru a verifica punctele finale și a vedea acreditările.

Un CLI simplu cu o subcomandă și ajutor

Pentru a începe să vă construiți CLI, instalați Commander și Axios cu următoarea comandă:

npm install commander axios

Creați un folder nou, cos, în directorul de proiect și un nou fișier gol, index.js:

mkdir bin
cd bin
touch index.js

The cos (Prescurtare de la „binar”) este important, deoarece conține fișierul punct de intrare pe care Node îl apelează atunci când rulați CLI. The index.js fișierul este acest fișier punct de intrare. Acum, editați fișierul index.js și începeți să vă construiți CLI cu API-ul Commander.js.

În primul rând, importați program obiect de la comandant:

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

Veți folosi program obiect pentru a defini interfața programului dvs., inclusiv sub-comenzi, opțiuni și argumente. Obiectul are metode corespunzătoare pentru fiecare dintre acestea; de exemplu, pentru a defini o subcomandă, utilizați comanda metodă.

Definiți a găsi subcomandă pentru CLI pentru a căuta cuvinte din Dicționarul Urban și pentru a adăuga o descriere pentru aceasta folosind codul de mai jos:

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

Aceasta înregistrează a găsi comanda, care așteaptă un cuvânt după ea și o descriere pentru acesta. Utilizarea parantezelor unghiulare înseamnă că cuvântul este un argument necesar; utilizați în schimb paranteze pătrate ([]) pentru a-l face opțional.

Ar trebui să adăugați o descriere deoarece Commander.js o folosește pentru a genera text de ajutor. Când rulați aplicația cu Ajutor comanda, veți primi un ghid de utilizare standard.

Pentru a testa acest lucru, adăugați următoarele:

program.parse()

Apoi rulați programul și transmiteți-l Ajutor comandă pentru a obține rezultatul de mai jos:

Acesta este modul în care orice aplicație CLI standard își va afișa ajutorul utilizatorilor și, cu Commander, nu trebuie să vă faceți griji că o creați singur. The -h și --Ajutor opțiunile sunt utile pentru a verifica ghidul de utilizare pentru o comandă.

Definirea opțiunilor și pregătirea programului final

De asemenea, definiți o opțiune prin lanțul opțiune metoda la definirea comenzii.

Iată cum puteți defini o opțiune pentru a include exemple în definițiile cuvintelor:

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

Și iată cum să definiți o opțiune care specifică numărul de definiții de returnat:

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

The opțiune metoda acceptă doi parametri șir, unul pentru numele opțiunii (atât formele scurte, cât și cele lungi) și celălalt pentru descrierea acesteia. Extraul [Cantitate] argument în numara opțiunea este valoarea pentru numărul de definiții de afișat.

Acum, ultima metodă de adăugat este acțiune metodă. Veți implementa găsi funcționalitatea comenzii în cadrul acestei metode. Adăugați-l în lanț, astfel încât codul dvs. să arate acum astfel:

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

Cu această configurare, iată ce comandă pentru a obține trei definiții laugh out loud cu exemple va arăta astfel:

urbanary-cli find lol -e -c 3

Sau, folosind forma lungă a fiecărei opțiuni:

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

Verifică Pagina npm a comandantului pentru a afla mai multe despre acesta și cum să-i adaptezi funcțiile pentru diferitele cazuri de utilizare.

Implementarea funcționalității programului

Mai întâi, importați Axios în dvs index.js fișier după cum urmează:

const axios = require('axios');

Apoi, în corpul funcției de acțiuneParametrul lui, puteți implementa logica de a face cereri către Dicționarul Urban și de a afișa rezultatele în funcție de opțiunile dvs.

Începeți prin a vă defini cererea:

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

Apoi faceți cererea către API folosind Axios cu următorul cod:

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

Singura proprietate de care aveți nevoie din datele de răspuns este listă proprietate care conține definiții și exemple.

Încă în încerca bloc, adăugați această logică pentru a gestiona opțiunile și afișați rezultatele după cum urmează:

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

Acest cod evaluează argumentele comenzii folosind instrucțiuni if-else pentru a determina modul de afișare a ieșirii. Dacă exemplu și numara opțiunile sunt trecute, se repetă wordData și imprimă cu ele numărul specificat de definiții și exemple.

Dacă treci doar numara, afișează acea cantitate de definiții fără exemple. Dacă treci doar exemplu, afișează o definiție cu o propoziție exemplu. The altfel declarația este comportamentul implicit de a tipări doar definiția dacă nu treceți nicio opțiune.

Aplicația este acum gata, așa că următorul pas este să o faceți executabilă. Începe prin a adăuga o linie shebang la începutul fișierului bin/index.js, astfel încât să îl puteți rula ca script independent:

#!/usr/bin/env node

Apoi, deschideți pachet.json fișier, editați valoarea principal proprietate și adăugați a cos proprietate după ea astfel:

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

Cheia urbana-cli, sub cos este comanda pe care o vei introduce în terminalul tău pentru a rula aplicația. Așadar, asigurați-vă că utilizați un nume potrivit atunci când vă construiți aplicațiile în linia de comandă.

Alerga npm install -g pentru a instala aplicația la nivel global și vei putea executa aplicația ca o comandă de pe terminalul tău.

Imaginea de mai jos arată procesul de instalare și o comandă de testare pentru a găsi sensul lmk:

De asemenea, îl puteți publica în registrul pachetului npm rulând npm publică în terminalul din directorul proiectului. Acest lucru îl face instalabil de oricine de oriunde îl folosește instalare npm.

Este mai ușor să construiți și să publicați aplicația dvs. cu Node.js, în comparație cu atunci când dvs construiți CLI cu tehnologii precum Rust.

Creați aplicații CLI funcționale cu Node.js

Indiferent dacă lucrați la un pachet npm și aveți nevoie de un utilitar CLI care să îl însoțească, fie că doriți doar să construiți un instrument pentru a vă îmbunătăți fluxul de lucru ca dezvoltator. Aveți tot ce aveți nevoie pentru a vă aduce ideea la viață cu pachetul Node.js Commander.

De asemenea, puteți merge mai departe utilizând alte biblioteci pentru a crea experiențe CLI îmbunătățite pentru aplicațiile dvs., Node.js este suficient de robust pentru a vă servi scopurile fără prea multe bătăi de cap.