Создание приложения CLI с помощью NestJS: быстрое и простое пошаговое руководство
19 сентября 2023 г.Недавно я начал работать в команде разработчиков опыта компании. Одной из связанных с этим обязанностей является создание более крупных приложений CLI.
Как я писал ранее, я использую коммандер
библиотеку при написании сценариев DevOps для моих проектов NodeJS. Это отлично подходит для небольших утилит, которыми будут пользоваться всего несколько человек, но что, если им нужно взаимодействовать с несколькими сервисами и иметь множество вложенных команд?
Как оказалось, NestJS поддерживает это, используя ту же библиотеку командира, которую я использовал ранее. В этой статье я покажу вам, как создать базовый интерфейс командной строки с помощью этой настройки.
Создание проекта
Создание проекта CLI аналогично созданию API с помощью NestJS. Просто следуйте основному рабочему процессу на веб-сайте Nestjs.
npm i -g @nestjs/cli
nest new my-cli-project
cd my-cli-project
Настройка nest-commander
Библиотека nest-commander
содержит весь код, необходимый для создания CLI Commander в фоновом режиме. Как и в случае любой другой зависимости узла, первым шагом является установка пакета.
npm i nest-commander
Создание команды
Как и при обычной разработке NestJS, нам нужно создать модуль, в котором будет жить наша команда.
<блок-цитата>Nest-Commander предоставляет некоторые инструменты, подключаемые к интерфейсу гнезда. Я пробовал их использовать, но не смог заставить их работать. Возможно, вам повезет больше, но я продолжу ручной процесс.
nest g module CowSay
Обычно вы создаете контроллер или преобразователь в своем модуле, используя командную строку Nest. Поскольку мы создаем интерфейс командной строки, мы хотим вместо этого создать Command
. Создайте файл cow-say.command.ts
в папке src/cow-say
и откройте его.
Каждая создаваемая вами команда будет расширять класс CommandRunner
и использовать декоратор @Command()
. В только что созданный файл cow-say.command.ts
добавьте следующее.
import { Command, CommandRunner } from 'nest-commander';
@Command({
name: 'cowsay',
options: {
isDefault: true,
},
})
export class CowSayCommand extends CommandRunner {
async run(): Promise<void> {
}
}
Чтобы эта команда что-то отображала, импортируйте библиотеку cowsay
.
import * as cowsay from 'cowsay';
Вам тоже нужно будет его установить...
npm i cowsay
…и обновите метод run
в cow-say.command.ts
async run(): Promise<void> {
console.log(cowsay.say({ text: 'Hello World!' }));
}
Соединяем все вместе
Теперь, когда команда создана, вам необходимо зарегистрировать ее как часть модуля. Откройте файл cow-say.module.ts
и добавьте CowSayCommand
в качестве поставщика.
import { Module } from '@nestjs/common';
import { CowSayCommand } from './cow-say.command';
@Module({
providers: [CowSayCommand],
})
export class CowSayModule {}
Скажите NestJS, что это не сервер
А теперь самое сложное. Созданный вами проект гнезда по умолчанию настроен на создание REST API, но вам это не нужно. Итак, удалите службу приложения и контроллер.
rm app.service.ts
rm app.controller.ts
Затем обновите AppModule
, чтобы импортировать модуль CowSay
.
import { Module } from '@nestjs/common';
import { CowSayModule } from './cow-say/cow-say.module';
@Module({
imports: [CowSayModule],
})
export class AppModule {}
Наконец, вам необходимо обновить файл main.ts
. Вы измените функцию bootstrap
, чтобы использовать CommandFactory
вместо NestFactory
.
import { CommandFactory } from 'nest-commander';
import { AppModule } from './app.module';
async function bootstrap() {
await CommandFactory.run(AppModule);
}
bootstrap();
Запускаем
Мне нравится иметь возможность запускать инструменты CLI без необходимости запуска этапа сборки TypeScript. Это помогает ускорить разработку.
Чтобы запустить CLI без его сборки, вы будете использовать пакет ts-node
. Для начала установите его как зависимость разработки.
npm i -D ts-node
Теперь добавьте новый скрипт в package.json
"start:cli": "ts-node src/main.ts"
…и вы можете протестировать свой CLI, запустив скрипт
❯ npm run start:cli
> my-cli-project@0.0.1 start:cli
> ts-node src/main.ts
______________
< Hello World! >
--------------
^__^
(oo)_______
(__) )/
||----w |
|| ||
Сводка
В этой статье показано, как приступить к созданию вашего самого первого приложения NestJS CLI. Использование этого подхода может помочь вам создать более крупное приложение, которое можно будет обслуживать. В будущих статьях я познакомлю вас с более продвинутыми функциями этой настройки.
Также опубликовано здесь а>.
Оригинал