Научете как да създадете програма със стандартен интерфейс на командния ред, като използвате тази полезна библиотека.

Приложенията CLI (интерфейс на командния ред) са опростени текстови приложения, които се изпълняват в терминала за изпълнение на конкретни задачи. CLI приложенията играят решаваща роля в работния процес на почти всеки разработчик и ИТ специалист.

Те са предимно помощни инструменти, които взаимодействат с операционната система или приложения, които са и двете инсталирани локално или достъпни в интернет, за да изпълнят задача според въвеждането на потребителя и директиви.

Разбиране на CLI приложенията

Интерфейсът на командния ред ви позволява да взаимодействате с програма, като въвеждате редове текст. Много CLI програми работят по различен начин в зависимост от командата, която използвате, за да ги стартирате.

Например, програмата ls показва информация за файла и съдържанието на директориите. Може да го стартирате така:

ls -l /home

Тази команда включва:

  • Името на програмата: ls.
  • instagram viewer
  • Опция (или флаг). В такъв случай, е опция, която е съкращение от „дълъг“ и дава по-подробна информация.
  • Аргумент, /home. Тук аргументът указва път до директорията, за която да се покаже информация.

Докато всяка програма може да дефинира свой собствен интерфейс на командния ред, някои елементи са общи и се използват широко. Трябва да следвате тези стандарти, така че някой, който е запознат с интерфейса на командния ред, да може лесно да използва вашите програми.

Какво е Commander.js?

Commander.js е пакет, който ви позволява да създавате CLI приложения в Node.js. Той има богата библиотека от функции, които ви позволяват да създадете стандартно CLI приложение, извършващо голяма част от тежката работа. Трябва само да дефинирате команди, опции и функционалност за вашето CLI приложение.

Комбинирайки го с други пакети като Chalk.js за стилизиране, можете бързо да създадете напълно функционално CLI приложение в Node.js.

Изграждане на CLI приложение в Node.js с помощта на Commander.js

Помислете за примерно CLI приложение, urbanary-cli, който търси значението на думите и съкращенията в социалните медии от градският речник. Ще научите как да създадете CLI и да го публикувате в npm регистър на пакетите, така че други да могат да го инсталират.

Създайте нова папка и инициализирайте нов проект Node.js със следните команди:

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

Този CLI ще използва Axios за изпращане на HTTP заявки към API на Urban Dictionary. Можеш да използваш Бърз API за проверка на крайни точки и преглед на идентификационни данни.

Прост CLI с подкоманда и помощ

За да започнете да изграждате вашия CLI, инсталирайте Commander и Axios със следната команда:

npm install commander axios

Създайте нова папка, кошче, във вашата директория на проекта и нов празен файл, index.js:

mkdir bin
cd bin
touch index.js

The кошче (съкратено от „двоичен“) папката е важна, защото съдържа файла с входна точка, който Node извиква, когато стартирате своя CLI. The index.js файл е този файл с входна точка. Сега редактирайте файла index.js и започнете да изграждате своя CLI с API на Commander.js.

Първо импортирайте програма обект от командира:

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

Ще използвате програма обект за определяне на интерфейса на вашата програма, включително подкоманди, опции и аргументи. Обектът има съответни методи за всеки от тях; например, за да дефинирате подкоманда, използвайте команда метод.

Определете а намирам подкоманда за CLI за търсене на думи от Urban Dictionary и добавяне на описание за него, като използва кода по-долу:

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

Това регистрира a намирам команда, която очаква дума след нея и описание за нея. Използването на ъглови скоби означава, че думата е задължителен аргумент; вместо това използвайте квадратни скоби ([]), за да стане незадължителен.

Трябва да добавите описание, защото Commander.js го използва за генериране на помощен текст. Когато стартирате приложението с помогне команда, ще получите стандартно ръководство за използване.

За да тествате това, добавете следното:

program.parse()

След това стартирайте програмата и я предайте помогне команда за получаване на изхода по-долу:

Ето как всяко стандартно CLI приложение ще показва своята помощ на потребителите и с Commander не е нужно да се притеснявате да го създадете сами. The и --помогне опциите са полезни за проверка на ръководството за използване на команда.

Дефиниране на опции и изготвяне на окончателната програма

Можете също да дефинирате опция чрез верижно свързване на опция метод към дефиницията на командата.

Ето как да дефинирате опция за включване на примери в дефинициите на думи:

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

И ето как да дефинирате опция, указваща броя на дефинициите за връщане:

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

The опция методът приема два параметъра на низ, единият за името на опцията (както кратка, така и дълга форма), а другият за нейното описание. Екстрата [количество] аргумент в броя опция е стойността за броя дефиниции за показване.

Сега последният метод за добавяне е действие метод. Вие ще приложите намирам функционалността на командата в този метод. Добавете го към веригата, така че вашият код сега да изглежда така:

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

С тази настройка ето каква команда да получите три дефиниции хаха с примери ще изглежда така:

urbanary-cli find lol -e -c 3

Или, като използвате дългата форма на всяка опция:

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

Разгледайте npm страница на командира за да научите повече за него и как да адаптирате функциите му за вашите различни случаи на употреба.

Внедряване на функционалността на програмата

Първо импортирайте Axios във вашия index.js файл, както следва:

const axios = require('axios');

След това в тялото на функцията на действие, можете да приложите логиката за отправяне на заявки към Urban Dictionary и показване на резултатите според вашите опции.

Започнете, като дефинирате вашата заявка:

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

След това направете заявка към API с помощта на Axios със следния код:

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

Единственото свойство, от което се нуждаете от данните за отговора, е списък свойство, което съдържа дефиниции и примери.

Все още в опитвам блок, добавете тази логика за обработка на опции и показване на резултатите, както следва:

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

Този код оценява аргументите на командата с помощта на изрази if-else, за да определи как да се покаже изходът. Ако пример и броя се предават опции, той преминава през wordData и отпечатва определения брой дефиниции и примери с тях.

Ако преминете само броя, той показва това количество дефиниции без примери. Ако преминете само пример, той показва едно определение с примерно изречение. The друго операторът е поведението по подразбиране за отпечатване само на дефиницията, ако не подадете никакви опции.

Приложението вече е готово, така че следващата стъпка е да го направите изпълнимо. Започнете с добавяне шибан линия в началото на вашия файл bin/index.js, за да можете да го стартирате като самостоятелен скрипт:

#!/usr/bin/env node

След това отворете своя package.json файл, редактирайте стойността на основен свойство и добавете a кошче свойство след него така:

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

Ключът urbanary-cli, под кошче е командата, която ще въведете във вашия терминал, за да изпълните вашето приложение. Така че не забравяйте да използвате подходящо име там, когато създавате вашите приложения за команден ред.

Бягай npm инсталирате -g за да инсталирате приложението глобално и ще можете да изпълните приложението като команда от вашия терминал.

Изображението по-долу показва процеса на инсталиране и тестова команда, за да намерите значението на лмк:

Можете също да го публикувате в регистъра на пакетите npm, като стартирате npm публикува в терминала в директорията на проекта. Това го прави инсталираем от всеки от всяко място npm инсталирайте.

По-лесно е да изградите и публикувате приложението си с Node.js, в сравнение с това, когато изграждане на CLI с технологии като Rust.

Изградете функционални CLI приложения с Node.js

Независимо дали работите върху npm пакет и имате нужда от помощна програма CLI, която да го придружава, или просто искате да изградите инструмент, за да подобрите работния си процес като разработчик. Имате всичко необходимо, за да оживите идеята си с пакета Node.js Commander.

Можете също да отидете по-далеч, като използвате други библиотеки, за да създадете подобрени CLI изживявания за вашите приложения, Node.js е достатъчно здрав, за да обслужва вашите цели без много проблеми.