Ускорьте🚀 свою разработку с помощью основных пакетов и инструментов
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