Dowiedz się, jak zbudować program ze standardowym interfejsem wiersza poleceń, korzystając z tej przydatnej biblioteki.
Aplikacje CLI (interfejs wiersza poleceń) to uproszczone aplikacje tekstowe, które działają w terminalu w celu wykonania określonych zadań. Aplikacje CLI odgrywają kluczową rolę w przepływie pracy niemal każdego programisty i specjalisty IT.
Są to głównie narzędzia użytkowe, które wchodzą w interakcję z systemem operacyjnym lub aplikacjami, które nimi są instalowane lokalnie lub dostępne przez Internet w celu wykonania zadania zgodnie z danymi wprowadzonymi przez użytkownika dyrektywy.
Zrozumienie aplikacji CLI
Interfejs wiersza poleceń umożliwia interakcję z programem poprzez wpisywanie wierszy tekstu. Wiele programów CLI działa inaczej w zależności od polecenia użytego do ich uruchomienia.
Na przykład, program l wyświetla informacje o pliku i zawartość katalogów. Możesz uruchomić to w ten sposób:
ls -l /home
To polecenie obejmuje:
- Nazwa programu: ls.
- Opcja (lub flaga). W tym przypadku, -l to opcja będąca skrótem od „long” i generująca bardziej szczegółowe informacje.
- argument, /home. Tutaj argument określa ścieżkę do katalogu, o którym mają być wyświetlane informacje.
Chociaż każdy program może definiować własny interfejs wiersza poleceń, pewne elementy są powszechne i szeroko stosowane. Powinieneś przestrzegać tych standardów, aby osoba zaznajomiona z interfejsem wiersza poleceń mogła z łatwością korzystać z Twoich programów.
Co to jest Commander.js?
Commander.js jest pakiet umożliwiający tworzenie aplikacji CLI w Node.js. Posiada bogatą bibliotekę funkcji, które pozwalają zbudować standardową aplikację CLI, wykonując większość ciężkiej pracy. Wystarczy zdefiniować polecenia, opcje i funkcjonalność aplikacji CLI.
Łącząc go z innymi pakietami, takimi jak Chalk.js do stylizacji, możesz szybko stworzyć w pełni funkcjonalną aplikację CLI w Node.js.
Budowanie aplikacji CLI w Node.js przy użyciu Commander.js
Rozważ przykładową aplikację CLI, urbanary-cli, który wyszukuje znaczenie słów i skrótów z mediów społecznościowych Słownik Miejski. Dowiesz się, jak utworzyć interfejs CLI i opublikować go w witrynie npm rejestru pakietów, aby inni mogli go zainstalować.
Utwórz nowy folder i zainicjuj nowy projekt Node.js za pomocą następujących poleceń:
mkdir urbanary-cli
cd urbanary-cli
npm init -y
Ten interfejs CLI będzie używany Axios do wysyłania żądań HTTP do interfejsu API słownika miejskiego. Możesz użyć Szybkie API aby sprawdzić punkty końcowe i wyświetlić poświadczenia.
Prosty interfejs CLI z podkomendą i pomocą
Aby rozpocząć budowanie interfejsu CLI, zainstaluj Commander i Axios za pomocą następującego polecenia:
npm install commander axios
Stworzyć nowy folder, kosz, w katalogu projektu i nowy pusty plik, indeks.js:
mkdir bin
cd bin
touch index.js
The kosz Folder (skrót od „binary”) jest ważny, ponieważ zawiera plik punktu wejścia, który Node wywołuje po uruchomieniu CLI. The indeks.js plik jest plikiem punktu wejścia. Teraz edytuj plik Index.js i rozpocznij tworzenie interfejsu CLI za pomocą interfejsu API Commander.js.
Najpierw zaimportuj plik program obiekt od Commandera:
const { program } = require('commander');
Będziesz korzystać z program obiekt do definiowania interfejsu programu, w tym poleceń podrzędnych, opcji i argumentów. Obiekt ma odpowiednie metody dla każdego z nich; na przykład, aby zdefiniować podpolecenie, użyj opcji Komenda metoda.
Zdefiniuj znajdować podkomenda interfejsu CLI umożliwiająca wyszukiwanie słów w słowniku Urban Dictionary i dodawanie ich opisu przy użyciu poniższego kodu:
// index.js
program
.command('find ' )
.description('find meaning of a word or abbreviation or slang')
Rejestruje to a znajdować polecenie, które oczekuje po nim słowa i jego opisu. Użycie nawiasów ostrokątnych oznacza, że słowo jest wymaganym argumentem; zamiast tego użyj nawiasów kwadratowych ([]), aby było to opcjonalne.
Powinieneś dodać opis, ponieważ Commander.js używa go do generowania tekstu pomocy. Po uruchomieniu aplikacji za pomocą pomoc polecenie, otrzymasz standardowy przewodnik użytkowania.
Aby to przetestować, dodaj następujące elementy:
program.parse()
Następnie uruchom program i przekaż go pomoc polecenie, aby uzyskać poniższe dane wyjściowe:
W ten sposób każda standardowa aplikacja CLI wyświetli pomoc użytkownikom, a dzięki Commander nie musisz się martwić o jej samodzielne utworzenie. The -H I --pomoc Opcje są przydatne do sprawdzania instrukcji użycia polecenia.
Określenie opcji i przygotowanie programu końcowego
Można także zdefiniować opcję poprzez połączenie opcja metodę do definicji polecenia.
Oto jak zdefiniować opcję uwzględniania przykładów w definicjach słów:
program.option('-e, --example', "Display examples")
A oto jak zdefiniować opcję określającą liczbę zwracanych definicji:
program.option(
'-c, --count [amount]',
'amount of definitions to display (max is 10)'
)
The opcja metoda przyjmuje dwa parametry łańcuchowe, jeden jako nazwę opcji (zarówno w formie krótkiej, jak i długiej), a drugi jako jej opis. Statysta [kwota] argument w liczyć opcja jest wartością określającą liczbę definicji do wyświetlenia.
Ostatnią metodą dodania jest teraz metoda działanie metoda. Będziesz wdrażał znajdować funkcjonalność polecenia w ramach tej metody. Dodaj go do łańcucha, aby Twój kod wyglądał teraz tak:
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) => {});
W tej konfiguracji oto polecenie, aby uzyskać trzy definicje Lol z przykładami będzie wyglądać następująco:
urbanary-cli find lol -e -c 3
Lub używając długiej formy każdej opcji:
urbanary-cli find lol --example --count 3
Wymeldować się Strona npm dowódcy aby dowiedzieć się więcej na ten temat i dowiedzieć się, jak dostosować jego funkcje do różnych zastosowań.
Implementacja funkcjonalności programu
Najpierw zaimportuj Axios do swojego indeks.js plik w następujący sposób:
const axios = require('axios');
Następnie w ciele funkcji działanieparametru, możesz zaimplementować logikę wysyłania żądań do słownika miejskiego i wyświetlania wyników zgodnie z własnymi opcjami.
Zacznij od zdefiniowania swojej prośby:
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'
}
}
Następnie złóż żądanie do API za pomocą Axios z następującym kodem:
try {
let resp = await axios.request(requestOptions);
console.log(`Definitions for ${word} fetched`);
wordData = resp.data.list;
} catch (err) {
console.error(err.message)
}
Jedyną właściwością, której potrzebujesz z danych odpowiedzi, jest lista właściwość, która przechowuje definicje i przykłady.
Wciąż w próbować block, dodaj tę logikę do obsługi opcji i wyświetl wyniki w następujący sposób:
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}`);
}
Ten kod ocenia argumenty polecenia za pomocą instrukcji if-else w celu określenia sposobu wyświetlania danych wyjściowych. Jeśli przykład I liczyć opcje są przekazywane, następuje iteracja słowoDane i drukuje wraz z nimi określoną liczbę definicji i przykładów.
Jeśli tylko przejdziesz liczyć, wyświetla tę liczbę definicji bez przykładów. Jeśli tylko przejdziesz przykład, wyświetla jedną definicję z przykładowym zdaniem. The w przeciwnym razie instrukcja jest domyślnym zachowaniem polegającym na wydrukowaniu samej definicji, jeśli nie przekażesz żadnych opcji.
Aplikacja jest już gotowa, więc kolejnym krokiem jest nadanie jej wykonalności. Zacznij od dodania linia shebang na początek pliku bin/index.js, aby można było uruchomić go jako samodzielny skrypt:
#!/usr/bin/env node
Następnie otwórz plik pakiet.json plik, edytuj wartość pliku główny właściwość i dodaj a kosz właściwość po tym w ten sposób:
"main": "./bin/index.js",
"bin": {
"urbanary-cli": "./bin/index.js"
},
Klucz urbanary-cli, pod kosz to polecenie, które wpiszesz w terminalu, aby uruchomić aplikację. Dlatego podczas tworzenia aplikacji wiersza poleceń pamiętaj o użyciu odpowiedniej nazwy.
Uruchomić npm instalacja -g aby zainstalować aplikację globalnie, a będziesz mógł uruchomić aplikację jako polecenie z terminala.
Poniższy obraz przedstawia proces instalacji i polecenie testowe, aby znaleźć znaczenie lmk:
Możesz także opublikować go w rejestrze pakietów npm, uruchamiając npm publikuj w terminalu w katalogu projektu. Dzięki temu może go zainstalować każdy, z dowolnego miejsca instalacja npm.
Łatwiej jest zbudować i opublikować aplikację za pomocą Node.js niż wtedy, gdy Ty buduj CLI za pomocą technologii takich jak Rust.
Twórz funkcjonalne aplikacje CLI za pomocą Node.js
Niezależnie od tego, czy pracujesz nad pakietem npm i potrzebujesz towarzyszącego mu narzędzia CLI, czy po prostu chcesz zbudować narzędzie usprawniające przepływ pracy jako programista. Dzięki pakietowi Node.js Commander masz wszystko, czego potrzebujesz, aby wcielić swój pomysł w życie.
Możesz także pójść dalej, korzystając z innych bibliotek, aby stworzyć ulepszone środowisko CLI dla swoich aplikacji. Node.js jest wystarczająco solidny, aby bez większych problemów służyć Twoim celom.