0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>СLI или интерфейс командной строки - гибкий инструмент для автоматизации рутинных операций. Рассказываем, как использовать его преимущества на примере простого приложения на Node.js.</strong></p>
1
<p><strong>СLI или интерфейс командной строки - гибкий инструмент для автоматизации рутинных операций. Рассказываем, как использовать его преимущества на примере простого приложения на Node.js.</strong></p>
2
<p><em>Это адаптированный перевод статьи</em><a>Command-line interface to the rescue with commander.js!</a><em>из блога разработчика</em>Виктора Кезадо*. Повествование ведется от лица автора оригинала.*</p>
2
<p><em>Это адаптированный перевод статьи</em><a>Command-line interface to the rescue with commander.js!</a><em>из блога разработчика</em>Виктора Кезадо*. Повествование ведется от лица автора оригинала.*</p>
3
<p>Пятьдесят лет назад у программ не было удобных пользовательских интерфейсов: единственным средством ввода была клавиатура, приложения вызывались путем написания их имен, а вывод был текстовым.</p>
3
<p>Пятьдесят лет назад у программ не было удобных пользовательских интерфейсов: единственным средством ввода была клавиатура, приложения вызывались путем написания их имен, а вывод был текстовым.</p>
4
<p>Разработчикам приходилось проявлять изобретательность, чтобы сделать программы более гибкими. Так появился интерфейс командной строки (или пользовательский интерфейс командной строки - CLI). Его определение звучит как "параметрическая компьютерная программа, которая получает входные данные (параметры и опции) через консольный интерфейс или скрипт".</p>
4
<p>Разработчикам приходилось проявлять изобретательность, чтобы сделать программы более гибкими. Так появился интерфейс командной строки (или пользовательский интерфейс командной строки - CLI). Его определение звучит как "параметрическая компьютерная программа, которая получает входные данные (параметры и опции) через консольный интерфейс или скрипт".</p>
5
<p>Следующим шагом было появление графического пользовательского интерфейса (GUI), который вытеснил CLI в узкую область системного администрирования, разработки и поклонников Unix.</p>
5
<p>Следующим шагом было появление графического пользовательского интерфейса (GUI), который вытеснил CLI в узкую область системного администрирования, разработки и поклонников Unix.</p>
6
<p>Хотя CLI далек от былой популярности, среди разработчиков он переживает период возрождения. Многие приложения (например, VS Code и Spotify) интегрировали CLI в свои пользовательские интерфейсы, а языки программирования (например, Node.js и Golang) используют его для упрощения процесса разработки.</p>
6
<p>Хотя CLI далек от былой популярности, среди разработчиков он переживает период возрождения. Многие приложения (например, VS Code и Spotify) интегрировали CLI в свои пользовательские интерфейсы, а языки программирования (например, Node.js и Golang) используют его для упрощения процесса разработки.</p>
7
<p>Интерфейс командной строки полезен, когда нужно передавать сценарии или команды с одинаковым набором параметров, а также для автоматизации определенных последовательностей действий.</p>
7
<p>Интерфейс командной строки полезен, когда нужно передавать сценарии или команды с одинаковым набором параметров, а также для автоматизации определенных последовательностей действий.</p>
8
<h2>Содержание</h2>
8
<h2>Содержание</h2>
9
<ul><li><a>Преимущества CLI</a></li>
9
<ul><li><a>Преимущества CLI</a></li>
10
<li><a>Как создать собственный CLI</a></li>
10
<li><a>Как создать собственный CLI</a></li>
11
<li><a>Заключение</a></li>
11
<li><a>Заключение</a></li>
12
</ul><h2>Преимущества CLI</h2>
12
</ul><h2>Преимущества CLI</h2>
13
<p>Инструменты интерфейса командной строки можно рассматривать как набор сценариев автоматизации, объединенных удобным API. Речь идет обо всех преимуществах автоматизации рутинных действий (повышение производительности, снижение количества ошибок и других) в купе с гибкостью.</p>
13
<p>Инструменты интерфейса командной строки можно рассматривать как набор сценариев автоматизации, объединенных удобным API. Речь идет обо всех преимуществах автоматизации рутинных действий (повышение производительности, снижение количества ошибок и других) в купе с гибкостью.</p>
14
<p>Вероятно, вы подумали, что графический интерфейс лучше подходит для этих целей и выглядит удобнее. Однако он потребляет больше ресурсов при запуске и его сложно масштабировать. Кроме того, разработка графического интерфейса занимает больше времени и стоит дороже, чем CLI.</p>
14
<p>Вероятно, вы подумали, что графический интерфейс лучше подходит для этих целей и выглядит удобнее. Однако он потребляет больше ресурсов при запуске и его сложно масштабировать. Кроме того, разработка графического интерфейса занимает больше времени и стоит дороже, чем CLI.</p>
15
<p>Преимущества CLI для бизнеса можно описать так:</p>
15
<p>Преимущества CLI для бизнеса можно описать так:</p>
16
<ul><li>Использование интерфейса командной строки ускоряет время вывода продукта на рынок</li>
16
<ul><li>Использование интерфейса командной строки ускоряет время вывода продукта на рынок</li>
17
<li>Снижает затраты по сравнению с использованием пользовательского интерфейса</li>
17
<li>Снижает затраты по сравнению с использованием пользовательского интерфейса</li>
18
<li>Снижает затраты на онбординг новых сотрудников.</li>
18
<li>Снижает затраты на онбординг новых сотрудников.</li>
19
</ul><p>Подробно эти пункты раскрыты в исследовании<a>IBM и Forbes</a>, а также в отчете<a>McKinsey</a>.</p>
19
</ul><p>Подробно эти пункты раскрыты в исследовании<a>IBM и Forbes</a>, а также в отчете<a>McKinsey</a>.</p>
20
<h2>Как создать собственный CLI</h2>
20
<h2>Как создать собственный CLI</h2>
21
<p>Можно создать собственный интерфейс командной строки с нуля, но гораздо удобнее использовать фреймворки: они существуют для Python, Javascript, Golang и многих других языков программирования.</p>
21
<p>Можно создать собственный интерфейс командной строки с нуля, но гораздо удобнее использовать фреймворки: они существуют для Python, Javascript, Golang и многих других языков программирования.</p>
22
<p>Для этой статьи я использовал JS-фреймворк с открытым исходным кодом commander.js, который работает на Node.js.</p>
22
<p>Для этой статьи я использовал JS-фреймворк с открытым исходным кодом commander.js, который работает на Node.js.</p>
23
<p>Прежде чем перейти к коду, рассмотрим некоторые особенности commander.js:</p>
23
<p>Прежде чем перейти к коду, рассмотрим некоторые особенности commander.js:</p>
24
<ul><li>Команды в этом фреймворке похожи на исполняемые файлы. Это программы, которым задаются параметры и аргументы</li>
24
<ul><li>Команды в этом фреймворке похожи на исполняемые файлы. Это программы, которым задаются параметры и аргументы</li>
25
<li>Аргумент - то, что передается команде для обработки</li>
25
<li>Аргумент - то, что передается команде для обработки</li>
26
<li>Параметры - то, что изменяет поведение команды. Они могут быть заданы в короткой (например, -h) или длинной (-help) формах.</li>
26
<li>Параметры - то, что изменяет поведение команды. Они могут быть заданы в короткой (например, -h) или длинной (-help) формах.</li>
27
</ul><p>Перейдем к коду. Начнем с простого примера, который можно использовать в каждом проекте: вывода "Hello, World!". Создадим файл с именем<em>my.js</em>и добавим в него следующий код*:*</p>
27
</ul><p>Перейдем к коду. Начнем с простого примера, который можно использовать в каждом проекте: вывода "Hello, World!". Создадим файл с именем<em>my.js</em>и добавим в него следующий код*:*</p>
28
<p>Эта программа вызывается так:</p>
28
<p>Эта программа вызывается так:</p>
29
<p>Теперь сделаем так, чтобы программа могла учитывать некоторые параметры (аргументы). Например, приветствовать людей по именам:</p>
29
<p>Теперь сделаем так, чтобы программа могла учитывать некоторые параметры (аргументы). Например, приветствовать людей по именам:</p>
30
<p>Из примера выше видно, что программа принимает количество имен, отличное от нуля, в качестве аргументов. Для этого используется метод arguments(args), а в методе action(Function) имена можно обрабатывать так, как мы хотим. Аргументы передаются вместе с командой вызова и указываются через пробелы:</p>
30
<p>Из примера выше видно, что программа принимает количество имен, отличное от нуля, в качестве аргументов. Для этого используется метод arguments(args), а в методе action(Function) имена можно обрабатывать так, как мы хотим. Аргументы передаются вместе с командой вызова и указываются через пробелы:</p>
31
<p>В таком виде программа уже выглядит интереснее. Теперь реализуем одно из главных преимуществ CLI - возможность работать с несколькими командами одновременно:</p>
31
<p>В таком виде программа уже выглядит интереснее. Теперь реализуем одно из главных преимуществ CLI - возможность работать с несколькими командами одновременно:</p>
32
<p>Теперь создадим другой файл, следуя правилу имен: файл точки входа и имя команды через дефис. В этом примере файл точки входа<em>my.js,</em>значит чтобы вызвать команду hello, мне понадобится файл<em>my-hello.js</em>.</p>
32
<p>Теперь создадим другой файл, следуя правилу имен: файл точки входа и имя команды через дефис. В этом примере файл точки входа<em>my.js,</em>значит чтобы вызвать команду hello, мне понадобится файл<em>my-hello.js</em>.</p>
33
<p>Попробуем вызвать команду hello передав её вместе с именами:</p>
33
<p>Попробуем вызвать команду hello передав её вместе с именами:</p>
34
<p>Теперь проверим, как CLI может менять функциональность, передавая параметры. Чтобы сделать это, просто вызовем метод option(opts, description):</p>
34
<p>Теперь проверим, как CLI может менять функциональность, передавая параметры. Чтобы сделать это, просто вызовем метод option(opts, description):</p>
35
<p>В результате получаем следующее:</p>
35
<p>В результате получаем следующее:</p>
36
<h2>Заключение</h2>
36
<h2>Заключение</h2>
37
<p>Мы только что создали очень упрощенный, но рабочий инструмент, используя возможности интерфейса командной строки. Посмотреть результат можно<a>здесь</a>. Чтобы развернуть его, можно отправить код в npm, локально связать с npm-пакетами или создать имя для команды оболочки.</p>
37
<p>Мы только что создали очень упрощенный, но рабочий инструмент, используя возможности интерфейса командной строки. Посмотреть результат можно<a>здесь</a>. Чтобы развернуть его, можно отправить код в npm, локально связать с npm-пакетами или создать имя для команды оболочки.</p>
38
<p>Хотя именно этот инструмент бесполезен в практических целях, в документации commander.js есть описание инструментов, которые принесут реальную пользу.</p>
38
<p>Хотя именно этот инструмент бесполезен в практических целях, в документации commander.js есть описание инструментов, которые принесут реальную пользу.</p>