Ускорьте🚀 свою разработку с помощью основных пакетов и инструментов

Nest.js стал популярной средой для разработчиков, стремящихся создавать мощные серверные приложения с помощью Node.js. Сочетание безопасности TypeScript и модульной архитектуры завоевало сердца разработчиков по всему миру (в том числе и меня). Но знаете ли вы, что вы можете вывести свои проекты Nest.js на новый уровень с помощью некоторых удивительных пакетов?

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

Давайте начнем !!! 😉

1. Утилиты-декораторы:

Этот пакет предоставляет набор служебных декораторовдля TypeScript и служебных функцийдля JavaScript . Декораторы в TypeScript используются для изменения поведения классов, методов, свойств и т. д. Этот пакет предлагает различные готовые к использованию декораторы для упрощения общих задач или расширения функциональности вашего приложения, такие как debounce , delay , ограничение скорости , делегирование , регулирование , запоминание и многое другое.

import { debounce , rateLimit} from 'utils-decorators';

class MyClass {
  @debounce(1000)
  doSomething() {
    // Some time-consuming operation
  }

  @rateLimit({
      timeSpanMs: 2000,
      allowedCalls: 10,
    })
  doSomething2() {
    // Some time-consuming operation
  }
}

2. Сборники машинописных текстов:

Этот пакет представляет собой набор структур данных, реализованных на TypeScript. Он предоставляет различные структуры данных, такие как связанные списки, стеки, очереди, двоичное дерево поиска и многое другое.

import * as Collections from 'typescript-collections';

var myQueue = new Collections.Queue();
myQueue.enqueue(1);
myQueue.enqueue(2);

3. Nestjs-i18n:

Nestjs-i18n, вероятно, является модулем интернационализации (i18n) для Nestjs. Интернационализация позволяет адаптировать ваше приложение к различным языкам и локали. Этот пакет предоставляет декораторы, конвейеры и утилиты для управления переводами и обработки контента, зависящего от языка, в приложении Nestjs.

Первоначально вам нужно создать файл JSON для каждого языка:

//i18n/fr/translation.json
}
    "set-up-password": {
    "heading": "Bonjour, {username}",
    "title": "Réinitialiser le mot de passe",
    "followLink": "Veuillez suivre le lien envoyé à votre adresse e-mail {email} pour réinitialiser votre mot de passe"
}
}

И вот как мы можем его использовать:

import { Body, Controller, Get, HttpCode, Post } from '@nestjs/common';
import { I18n, I18nContext } from 'nestjs-i18n';
import { passwordDto, SetUpPasswordDto } from './password.dto';

export class ResetPasswordDto {
    username: string;
    email: string
}

export class passwordDto {
    title: string;
    text: string;
}

@Controller()
export class AppController {

  @Post('reset-password')
  @HttpCode(200)
  //I18n will be read from the query string -> ?lang=fr
  setUpPassword(@I18n() i18n: I18nContext, @Body() setUpPasswordDto: SetUpPasswordDto): passwordDto {
    return {
      title: i18n.t(`translation.set-up-password.title`),
      text: `${i18n.t('translation.set-up-password.heading', { args: { username: resetPasswordDto.username }})},

       ${i18n.t(`translation.set-up-password.followLink`, { args: { email: resetPasswordDto.email }})}`.replace(/\s\s+/g, ' ')
    }
  } 
}

4. Инверсия:

Inversify — это популярная библиотека контейнеров TypeScript для инверсии управления (IoC). Контейнеры IoC помогают управлять зависимостями в приложении, обеспечивая слабую связь и лучшую организацию кода. Inversify предоставляет инструменты для регистрации и разрешения зависимостей с использованием принципов инверсии управления.

import { injectable, inject, Container } from 'inversify';

// Defining an interface for the dependency
// which enforces the presence of 'doSomething()' method.
interface MyDependency {
  doSomething(): void;
}

// Implementing the interface with the @injectable decorator to 
// signify that it's an injectable class.
@injectable()
class MyDependencyImpl implements MyDependency {
  // Implementing the 'doSomething()'.
  doSomething(): void {
    console.log('Doing something...');
  }
}

// Creating a new instance of the Inversify container to manage dependency injection.
const container = new Container();

// Binding the MyDependency interface to the MyDependencyImpl class, 
// meaning when MyDependency is requested,
// the container will provide an instance of MyDependencyImpl.
container.bind<MyDependency>(MyDependency).to(MyDependencyImpl);

// Getting an instance of MyDependency from the container,
// which automatically resolves it to MyDependencyImpl
const instance = container.get<MyDependency>(MyDependency);

// Calling the 'doSomething()' method on the instance.
instance.doSomething();

5. Шкс и Шеллдж:

shx — это служебный пакет, обеспечивающий межплатформенный способ запуска команд оболочки из Node.js . Он позволяет выполнять команды оболочки, такие как cd, mkdir, rm, cp и другие, из скриптов npm. Пакет упрощает взаимодействие с оболочкой и позволяет автоматизировать задачи.

{
 "scripts": {
 "clean": "shx rm -rf build dist && shx echo Done"
 }
}

Shelljs — это библиотека Node.js, предоставляющая простой и переносимый API для программного запуска команд оболочки. Это позволяет разработчикам выполнять команды оболочки в своих сценариях и приложениях Node.js.

import * as shell from "shelljs"

shell.grep('--', '-v', 'path/to/file');

shell.cp('-R', '-dir', 'outdir'); 

6. Хаски:

husky — это пакет, используемый для легкого создания Git hooks в проектах Node.js и Nest.js. Перехватчики Git – это скрипты, которые автоматически выполняются, когда в репозитории Git происходят определенные действия,например, до или после фиксации, отправки или слияния. Husky упрощает процесс настройки. и управление этими перехватчиками Git, что позволяет автоматизировать такие действия, как анализ кода, выполнение тестов или форматирование кода перед выполнением конкретных операций Git.

7. Автопушка:

autocannon — это популярная служебная библиотека Node.js, используемая для нагрузочного тестирования HTTP-серверов и API. Он позволяет измерять производительность и поведение HTTP-сервера, отправляя одновременно большое количество запросов. С помощью autocannon вы можете провести стресс-тестирование сервера, выявить узкие места и проанализировать его производительность при различных нагрузках. Это ценный инструмент для обеспечения того, чтобы ваш сервер мог эффективно обрабатывать реальный трафик.

npm install -g autocannon

autocannon -c 100 -d 10 http://localhost:3000

8. Почтовая программа:

nodemailer — это мощный модуль Node.js, используемый для отправки электронных писем из приложений Node.js. Он предоставляет простой и гибкий API для отправки электронных писем через различных поставщиков услуг электронной почты (например, SMTP, SendGrid, Mailgun). С помощью nodemailer вы можете составлять и отправлять электронные письма с вложениями, содержимым HTML или обычным текстом, а также управлять статусом доставки электронной почты.

import { Injectable } from '@nestjs/common';
import * as nodemailer from 'nodemailer';

@Injectable()
export class MailerService {
  async sendEmail(to: string,subject: string,text: string): Promise<void>{
    const transporter = nodemailer.createTransport({
      // Set up your email service provider configuration here
    });

    await transporter.sendMail({
      from: '[email protected]',
      to,
      subject,
      text,
    });
  }
}

9. Кукольник:

puppeteer — это популярная библиотека Node.js, разработанная Google, предназначенная для автоматизации и управления безголовыми браузерами, в первую очередь Google Chrome. Он позволяет выполнять различные задачи, такие как создание снимков экрана, создание PDF-файлов, просмотр веб-сайтов и автоматизация взаимодействия с веб-страницами с помощью автономного браузера. . Puppeteer обычно используется для очистки веб-страниц, тестирования и автоматизации повторяющихся веб-задач.

// puppeteer.service.ts
import { Injectable } from '@nestjs/common';
import * as puppeteer from 'puppeteer';

@Injectable()
export class PuppeteerService {
  async takeScreenshot(url: string, outputPath: string): Promise<void> {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(url);
    await page.screenshot({ path: outputPath });
    await browser.close();
  }
}

10. @nestjs/терминал:

@nestjs/terminus — это модуль проверки работоспособности для приложений Nestjs. Проверки работоспособности необходимы для мониторинга работоспособности приложения и обеспечения правильной работы всех важных компонентов. Этот пакет предлагает декораторы или конечные точки для реализации пользовательских проверок работоспособности и интеграции их в ваше приложение Nestjs. Он также предоставляет такие функции, как мягкое завершение работы и проверки работоспособности/готовности Kubernetes для HTTP-приложений.

import { Controller, Get } from "@nestjs/common";
import { HealthCheck, HealthCheckService } from "@nestjs/terminus";

@Controller('health')
class HealthController {
  constructor(private readonly health: HealthCheckService) {}

  @Get()
  @HealthCheck()
  checkHealth() {
    return this.health.check([
      // Add your health checks here
      // Example: HealthIndicatorFunction
    ]);
  }
}

11. @swc/cli и @swc/core:

SWC (Speedy Web Compiler) — это компилятор JavaScript/TypeScript на основе Rust, известный своей высокой скоростью компиляции и совместимостью с современными языками. Он состоит из @swc/cli, удобного для пользователя интерфейса командной строки, и @swc/core, основного модуля. По умолчанию Nestjs использует компилятор TypeScript (tsc), тогда как SWC служит более быстрой альтернативой для компиляции и связывания кода TypeScript и JavaScript.

Используя SWC в проекте Nest, разработчики могут значительно сокращать время сборки и компиляции, что приводит к экономии времени в процессе разработки.

// package.json
{
  "scripts": {
    "build:swc": "npx swc --out-dir dist -w src",
    "start:swc": "nodemon dist/main",
    "dev": "concurrently   \"npm run build:swc\" \"npm run start:swc\" ",
   }
}

12. Одновременно:

Этот инструмент используется для одновременного запуска нескольких задач, точно так же, как мы делаем это в системах на базе Linux и Unix, используя символ ‘&’. Однако, как вы могли заметить, этот символ не работает в такой операционной системе, как Windows. К счастью, на помощь приходит concurrrnetly.

"start": "concurrently \"command1 arg\" \"command2 arg\""

13. @compodoc/комподок:

@compodoc/compodoc — невероятно крутой и удивительный инструмент для создания документации, который мне очень нравится. Он имеет возможность анализировать проекты Angular и создавать исчерпывающую документацию в различных форматах, тем самым облегчая разработчикам понимание, поддержку и совместное использование своих кодовых баз.

Кроме того, этот инструмент также подходит для проектов на основе Nest.js, поскольку Angular и Nest.js имеют одинаковую структуру кода. Работать с compodoc легко; после установки вам просто нужно запустить эту команду:

npx @compodoc/compodoc -p tsconfig.json -s

14. Гнездо-командир:

Commander — это популярный пакет, используемый для создания интерфейсов командной строки (CLI) в Node.js, а Nest-Commander — это пакет, который интегрирует библиотеку Commander с NestJS. Используя Nest-Commander, вы можете создавать мощные и гибкие интерфейсы командной строки приложения с помощью NestJS.

import { Command, CommandRunner, Option } from 'nest-commander';
import { Injectable } from '@nestjs/common';

@Injectable()
@Command({ name: 'example' })
export class ExampleCommand {
  execute() {
    console.log('Executing the example command');
  }

  @Option({
    flags: '-n, --number [number]',
    description: 'A basic number parser',
  })
  parseNumber(val: string): number {
    return Number(val);
  }
}

15. Geolib и Turfjs:

Geolib и Turf — это библиотеки JavaScript, используемые для геопространственных расчетов и анализа. Geolib упрощает вычисление географических координат и расстояний, позволяя выполнять такие задачи, как поиск ближайших точек и вычисление ограничивающих прямоугольников. Между тем, Turf предоставляет более широкий набор геопространственных функций, включая буферизацию, пересечение полигонов, расчет площади и измерение расстояний. Обе библиотеки являются ценными инструментами для картографических веб-приложений, проектов ГИС и любых разработок, связанных с обработкой геопространственных данных.

Спасибо 🙏, что нашли время прочитать мой первый пост в блоге! Ваши комментарии 💬и аплодисменты👏будут очень признательны, так как они будут мотивировать меня продолжать писать и совершенствоваться. Если вы нашли это полезным, я призываю вас изучить другие мои статьи для дополнительная информация .

Moein Moeinnia , Мой linkedin

Мои статьи:







ресурсы:

https://dev.to/zsevic/health-checks-with-terminus-lol
https://progressivecoder.com/nestjs-health-check-terminus/https://dev. to/mrsharpp/revolutionize-your-nestjs-compilation-time-boosting-speed-by-20x-with-swc-4ojf

https://localazy.com/blog/how-to-localize-a-nestjs-application-with-nestjs-i18n-and-localazy