Создание приложения CLI с помощью NestJS: быстрое и простое пошаговое руководство

Создание приложения 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. Использование этого подхода может помочь вам создать более крупное приложение, которое можно будет обслуживать. В будущих статьях я познакомлю вас с более продвинутыми функциями этой настройки.


Также опубликовано здесь.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE