Nest.js به یک چارچوب پرطرفدار برای توسعهدهندگان تبدیل شده است که به دنبال ساخت برنامههای قدرتمند سمت سرور با استفاده از Node.js هستند. ترکیب جذابیت های TypeScript و معماری ماژولار آن دلبستگی توسعهدهندگان جهانی (مانند من) را به دل خود جلب کرده است. اما آیا میدانستید که میتوانید با کمک برخی از پکیجهای شگفتانگیز، پروژههای Nest.js خود را به سطح بالاتری برسانید؟
اگر شما تازه با Nest.js آشنا شدهاید یا هنوز در حال آشنا شدن با آن هستید، نگران نباشید! در این وبلاگ، شما را در سفری به کشف انتخاب دقیقی از پکیجهای تغییردهنده بازی که پروژههای Nest.js شما را تقویت خواهند کرد، همراه خواهیم کرد. این پکیجها تنها برای توسعهدهندگان ماهر نیستند؛ آنها اینجا هستند تا زندگی شما را آسانتر کنند و پروژههای شما را شگفتانگیزتر کنند!
بیایید شروع کنیم !!! 😉
1- Utils-decorators :
این پکیج یک مجموعه از دکوراتورهای کاربردی برای TypeScript و توابع کاربردی برای JavaScript ارائه میدهد. دکوراتورها در TypeScript برای تغییر رفتار کلاسها، متدها، خصوصیات و غیره استفاده میشوند. این پکیج دکوراتورهای آمادهای ارائه میدهد تا وظایف رایج را سادهتر کند یا قابلیتها را در برنامهی شما افزایش دهد، مانند debounce، delay، rate limit، Delegate، throttle، memoize و غیره.
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-collections :
این پکیج یک مجموعه از ساختارهای داده پیادهسازی شده در TypeScript است. این پکیج انواع ساختارهای داده مانند لیستهای پیوندی، استکها، صفها، درخت جستجوی دودویی و غیره را ارائه میدهد.
import * as Collections from 'typescript-collections';
var myQueue = new Collections.Queue();
myQueue.enqueue(1);
myQueue.enqueue(2);
3- 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 :
Inversify یک کتابخانه معروف برای کنترل معکوس (IoC) در TypeScript است. کنترلگرهای 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 و Shelljs :
shx یک پکیج کاربردی است که راهی چندپلتفرمه برای اجرای دستورات shell از Node.js ارائه میدهد. این به شما امکان اجرای دستورات شل مانند cd، mkdir، rm، cp و دیگرها از اسکریپتهای npm را میدهد. این پکیج تعامل با شل را سادهتر میکند و به شما امکان اتوماسیون وظایف را فراهم میکند.
{
"scripts": {
"clean": "shx rm -rf build dist && shx echo Done"
}
}
Shelljs یک کتابخانه Node.js است که یک API ساده و قابل حمل برای اجرای دستورات shell به صورت برنامهنویسی فراهم میکند. این به توسعهدهندگان امکان اجرای دستورات شبیه به شل در اسکریپتها و برنامههای Node.js خود را میدهد.
import * as shell from "shelljs"
shell.grep('--', '-v', 'path/to/file');
shell.cp('-R', '-dir', 'outdir');
6- Husky :
husky یک پکیج است که برای ایجاد هوکهای گیت داخل یک پروژه Node.js و Nest.js استفاده میشود. هوکهای گیت اسکریپتهایی هستند که به صورت خودکار اجرا میشوند هنگامی که رخدادهای خاصی در یک مخزن گیت اتفاق میافتد، مانند قبل یا بعد از یک commit، push یا merge. husky فرآیند تنظیم و مدیریت این هوکهای گیت را سادهتر میکند و به شما امکان اتوماسیون اقداماتی مانند اجرای ابزارهای بررسی کد (linting)، اجرای تستها، یا قالببندی کد قبل از عملیاتهای خاص گیت را میدهد.
7- Autocannon :
autocannon یک کتابخانه کاربردی محبوب Node.js برای آزمون بار سرورها و رابطهای برنامهنویسی HTTP است. این به شما امکان میدهد تا عملکرد و رفتار یک سرور HTTP را با ارسال تعداد زیادی درخواست به صورت همزمان اندازهگیری کنید. با autocannon، میتوانید سرور خود را در مقابل بارهای بالا آزمایش کنید، نقاط توقف را شناسایی کنید و عملکرد آن را تحت بارهای مختلف تجزیه و تحلیل کنید. autocannon یک ابزار ارزشمند برای اطمینان از اینکه سرور شما به بهترین شکل ممکن ترافیک واقعی را اداره میکند، میباشد.
npm install -g autocannon
autocannon -c 100 -d 10 http://localhost:3000
8- Nodemailer :
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: 'your-email@example.com',
to,
subject,
text,
});
}
}
9- Puppeteer :
puppeteer یک کتابخانه محبوب Node.js توسعه داده شده توسط Google است که برای اتوماسیون و کنترل مرورگرهای بدون رابط کاربری (headless)، به ویژه Google Chrome طراحی شده است. این ابزار به شما امکان میدهد تا وظایف مختلفی را انجام دهید، مانند ایجاد تصاویر صفحه، ساختن فایلهای PDF، خارج کردن اطلاعات از وبسایتها و اتوماسیون تعامل با صفحات وب با استفاده از مرورگر بدون رابط کاربری داشته باشید. puppeteer به طور معمول برای خودکارسازی scrape کردن، تستگذاری و اتوماسیون استفاده میشود.
// 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/terminus@ :
@nestjs/terminus یک ماژول بررسی وضعیت برای برنامههای Nestjs است. بررسی وضعیت برای نظارت بر وضعیت برنامه و اطمینان از صحت عملکرد تمامی اجزای اساسی ضروری است. این پکیج دکوراتورها یا endpoints هایی را ارائه میدهد تا بررسیهای وضعیت سفارشی را پیادهسازی کرده و آنها را در برنامه Nestjsتان یاد بگیرید. همچنین ویژگیهایی مانند خاموشی آرام و بررسیهای وضعیت زنده/آمادگی برای برنامههای 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- Concurrently :
این ابزار برای اجرای چندین وظیفه به صورت موازی مورد استفاده قرار میگیرد، دقیقاً مانند کاری که در سیستمهای لینوکس و یونیکس با استفاده از نماد '&' انجام میدهیم. با این حال، شاید متوجه شدهاید که این نماد در یک سیستم عامل مانند ویندوز کار نمیکند. خوشبختانه، concurrently به کمک میآید.
"start": "concurrently \"command1 arg\" \"command2 arg\""
13- compodoc/compodoc@ :
compodoc/compodoc@ یک ابزار فوقالعاده و شگفتانگیز برای تولید مستندات است . این ابزار قابلیت تجزیه و تحلیل پروژههای Angular را دارد و مستندات جامع را به صورت انواع فرمتها تولید میکند، که این امر برای توسعهدهندگان آسانتر میکند تا کدهای خود را درک کنند، نگهداری کنند و به اشتراک بگذارند.
علاوه بر این، این ابزار همچنین برای پروژههای مبتنی بر Nest.js مناسب است زیرا Angular و Nest.js دارای ساختار کد مشترکی هستند. کار با compodoc بسیار آسان است؛ بعد از نصب، تنها کافی است این دستور را اجرا کنید:
npx @compodoc/compodoc -p tsconfig.json -s
14- Nest-commander :
Commander یک پکیج محبوب برای ساخت رابطهای خط فرمان (CLIs) در Node.js است و nest-commander یک پکیج است که کتابخانه Commander را با NestJS یکپارچه میکند. با استفاده از nest-commander، شما میتوانید برنامههای CLIs قدرتمند و انعطافپذیری با 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 و Turfjs کتابخانههای JavaScript برای محاسبات و تجزیه و تحلیل مکانی (geospatial) استفاده میشوند. Geolib محاسبات مختصات جغرافیایی و مسافت را سادهتر میکند و وظایفی مانند یافتن نزدیکترین نقاط و محاسبه جعبههای محدوده را فراهم میکند. در عین حال، Turf تعداد گستردهتری از توابع مکانی ارائه میدهد که شامل ایجاد حاشیه، تلاقی چندضلعیها، محاسبات مساحت و اندازهگیری مسافت میشود. هر دو کتابخانه ابزارهای ارزشمندی برای برنامههای نقشهکشی وب، پروژههای GIS و هر توسعهای که در پردازش دادههای مکانی شرکت میکند، میباشند.
خیلی ممنون از اینکه وقت گذاشتید و وبلاگ من رو خوندید!! نظرات خودتون رو با من درمیان بگذارید.
-معین معین نیا