HTML Diff
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>