Как создавать простые инструменты командной строки с помощью Dart

Вступление

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

Пример проекта продемонстрирует простые функции типичного приложения CLI, такие как синтаксический анализ аргументов и основные операции файловой системы.

Начиная

Если у вас еще нет среды Dart, перейдите на страницу установки. Копию исходного кода проекта можно найти в репозитории GitHub здесь.

Этот проект был создан с помощью stagehand, отличного пакета Dart, который помогает в настройке проектов Dart и Flutter. Чтобы установить stagehand для создания собственных приложений командной строки (и других) с помощью Dart:

$ pub global activate stagehand

Stagehand предоставляет несколько вариантов для типов проектов, одним из которых является console-full (который использовался при создании этого проекта). Чтобы создать базовую отправную точку для приложения командной строки с помощью stagehand:

$ stagehand console-full your-project-name

Точка входа в приложение

Основная точка входа для этой программы - bin / main.dart:

Это действительно простое приложение, поэтому здесь немного. В более сложном проекте именно здесь будут выполняться настройка и инициализация. В этом примере аргументы просто передаются в Demo.parse ( args ).

Демо-класс

Следующий файл для проверки - lib / demo.dart, в котором приложение принимает аргументы командной строки и определяет, какое действие выполнять, или отображает информацию об использовании, если в него переданы неправильные аргументы:

В классе Demo есть несколько статических методов для обработки нескольких простых задач, таких как печать локального имени хоста в примере hello world, отображение информации об использовании приложения и определение того, какую операцию выполнить на основе аргументы командной строки, переданные приложению. Существуют пакеты, такие как args, доступные для обработки синтаксического анализа аргументов, однако для этого действительно небольшого проекта я решил свести зависимости пакетов к минимуму (нулю).

Если после команды scan передается второй аргумент, этот аргумент передается простому сканеру файловой системы (который мы рассмотрим далее) для выполнения базового сканирования каталога заданного пути и отображения результатов.

Класс сканера

Последний файл в нашем проекте - это класс Scanner, расположенный в lib / scanner.dart:

В классе Scanner есть статический метод scan, который берет путь и начинает обход структуры каталогов, расположенной по этому пути. При этом используется очень упрощенная версия паттерна проектирования Factory Method, поскольку он использует статический метод для внутреннего создания экземпляра самого себя. Конечно, существует множество шаблонов проектирования, и это лишь один из примеров.

Сканер работает, начиная с предоставленного пути и просматривая его, получая список объектов FileSystemEntity для этого пути, выполняя цикл for по элементам, а затем либо просматривая элемент, если это Каталог или печать размера файла, если элемент является Файл . Элементом также может быть Ссылка (в нашем простом примере для этого нет случая, но его можно легко добавить).

Это все, что касается нашей базовой файловой системы Сканера и ее работы. Эта утилита может быть расширена для выполнения любого количества задач файловой системы (таких как поиск файлов или подсчет типов файлов), приема дополнительных аргументов или обработки других типов задач.

Заключение

Надеюсь, вам понравилась эта статья о создании простых инструментов командной строки с помощью Dart, который является мощным, гибким и очень выразительным языком, который также имеет отличную документацию и полезен для многих различных приложений, включая службы HTTP, процессоры изображений и т. Д. инструменты резервного копирования и различные другие утилиты, которые отлично работают в современной экосистеме разработки и развертывания. Например, у моей компании есть несколько базовых сервисов, развернутых в Heroku, которые были разработаны в Dart (дополнительные сведения о настройке пакетов сборки и развертывании приложений Dart на Heroku см. В этой статье).

Спасибо за чтение и удачи в следующем проекте Dart!

Кеннет Рейли (8_bit_hacker) технический директор LevelUP