Узнайте, как создать программу со стандартным интерфейсом командной строки, используя эту полезную библиотеку.

Приложения CLI (интерфейс командной строки) — это упрощенные текстовые приложения, которые запускаются в терминале для выполнения определенных задач. Приложения CLI играют решающую роль в рабочем процессе почти каждого разработчика и ИТ-специалиста.

В основном это служебные инструменты, которые взаимодействуют с операционной системой или приложениями, которые либо устанавливается локально или доступно через Интернет для выполнения задачи в соответствии с вводом пользователя и директивы.

Понимание приложений CLI

Интерфейс командной строки позволяет взаимодействовать с программой, вводя строки текста. Многие программы CLI работают по-разному в зависимости от команды, которую вы используете для их запуска.

Например, программа ls отображает информацию о файле и содержимое каталогов. Вы можете запустить это так:

ls -l /home

Эта команда включает в себя:

  • Название программы: лс.
  • Опция (или флаг). В этом случае,
    instagram viewer
    — это опция, которая является сокращением от «длинный» и дает более подробную информацию.
  • Аргумент, /home. Здесь аргумент указывает путь к каталогу, информацию о котором нужно показать.

Хотя каждая программа может определять свой собственный интерфейс командной строки, некоторые элементы являются общими и широко используются. Вам следует следовать этим стандартам, чтобы тот, кто знаком с интерфейсом командной строки, мог легко использовать ваши программы.

Что такое Commander.js?

Commander.js — это пакет, который позволяет создавать приложения CLI в Node.js. Он имеет богатую библиотеку функций, которые позволяют создавать стандартные приложения CLI, выполняя большую часть тяжелой работы. Вам нужно только определить команды, параметры и функции для вашего приложения CLI.

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

Создание приложения CLI в Node.js с использованием Commander.js

Рассмотрим пример приложения CLI, городской климат, который ищет значение слов и сокращений в социальных сетях из Городской словарь. Вы узнаете, как создать CLI и опубликовать его на НПМ реестр пакетов, чтобы другие могли его установить.

Создайте новую папку и инициализируйте новый проект Node.js с помощью следующих команд:

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

Этот CLI будет использовать Axios для отправки HTTP-запросов к API городского словаря. Вы можете использовать Рапид API для проверки конечных точек и просмотра учетных данных.

Простой интерфейс командной строки с подкомандой и справкой

Чтобы начать создание интерфейса командной строки, установите Commander и Axios с помощью следующей команды:

npm install commander axios

Создать новую папку, мусорное ведро, в каталоге вашего проекта и новый пустой файл, index.js:

mkdir bin
cd bin
touch index.js

мусорное ведро (сокращение от «двоичный») важна, поскольку она содержит файл точки входа, который Node вызывает при запуске вашего CLI. index.js file — это файл точки входа. Теперь отредактируйте файл 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')

Это регистрирует находить команда, ожидающая после себя слово и его описание. Использование угловых скобок означает, что слово является обязательным аргументом; вместо этого используйте квадратные скобки ([]), чтобы сделать его необязательным.

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

Чтобы проверить это, добавьте следующее:

program.parse()

Затем запустите программу и передайте ей помощь команда, чтобы получить вывод ниже:

Именно так любое стандартное приложение CLI будет отображать свою помощь пользователям, и с Commander вам не придется беспокоиться о ее создании самостоятельно. -час и --помощь параметры полезны для проверки руководства по использованию команды.

Определение вариантов и подготовка окончательной программы

Вы также определяете опцию, связывая вариант метод определения команды.

Вот как определить возможность включения примеров в определения слов:

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

А вот как определить опцию, определяющую количество возвращаемых определений:

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

вариант Метод принимает два строковых параметра: один для имени параметра (как в короткой, так и в длинной форме), а другой для его описания. Дополнительный [количество] аргумент в считать Параметр — это значение количества отображаемых определений.

Теперь последний метод, который нужно добавить, — это метод действие метод. Вы будете реализовывать находить функциональность команды в этом методе. Добавьте его в цепочку, чтобы ваш код теперь выглядел так:

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, чтобы определить, как отображать выходные данные. Если пример и считать параметры передаются, он перебирает словоДанные и печатает указанное количество определений и примеров с ними.

Если вы пройдете только считать, он отображает такое количество определений без примеров. Если вы пройдете только пример, отображается одно определение с примером предложения. еще Оператор — это поведение по умолчанию, при котором печатается только определение, если вы не передадите никаких параметров.

Теперь приложение готово, поэтому следующим шагом будет сделать его исполняемым. Начните с добавления линия Шебанга в начало вашего файла bin/index.js, чтобы его можно было запустить как отдельный скрипт:

#!/usr/bin/env node

Далее откройте свой пакет.json файл, отредактируйте значение основной свойство и добавьте мусорное ведро свойство после него вот так:

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

Ключ городской климат, под мусорное ведро — это команда, которую вы вводите в свой терминал для запуска приложения. Поэтому обязательно используйте подходящее имя при создании приложений командной строки.

Бегать НПМ установить -g чтобы установить приложение глобально, и вы сможете запустить приложение как команду со своего терминала.

На изображении ниже показан процесс установки и тестовая команда, позволяющая понять значение лмк:

Вы также можете опубликовать его в реестре пакетов npm, запустив НПМ опубликовать в терминале в каталоге проекта. Это делает его доступным для установки кем угодно и где угодно, используя установка npm.

С помощью Node.js проще создавать и публиковать приложения по сравнению с тем, когда вы создавайте интерфейсы командной строки с использованием таких технологий, как Rust.

Создавайте функциональные приложения CLI с помощью Node.js

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

Вы также можете пойти дальше, используя другие библиотеки для создания улучшенного интерфейса командной строки для ваших приложений. Node.js достаточно надежен, чтобы без особых хлопот служить вашим целям.