[Перевод] 16 NPM-пакетов, о которых должен знать каждый Node.js-разработчик
TL; DR: обзор 16 основных пакетов для Node.js‑разработки, доступных в NPM, включая Express.js для создания веб‑приложений, Axios для выполнения HTTP‑запросов и Mongoose для работы с базами данных MongoDB.
Node.js зарекомендовала себя как одна из лучших сред в области веб‑разработки, позволяющая создавать мощные масштабируемые приложения. По большей части это можно объяснить обширной экосистемой пакетов, доступных разработчикам в Node Package Manager (NPM). Эти пакеты помогают разработчикам ускорить выполнение задач, повышают производительность и избавляют от необходимости изобретать велосипеды.
В этой статье мы рассмотрим 16 обязательных для любого Node.js‑разработчика NPM‑пакетов. Мы подробно расскажем о них, включая их ключевые особенности, как их установить и как именно вы можете использовать их в своих проектах для улучшения ваших рабочих процессов.
1. Express

Express — это минималистичный Node.js‑фреймворк для создания веб‑приложений и API. Он упрощает обработку HTTP‑запросов и ответов, при этом предоставляя разработчикам достаточно гибкости, чтобы они могли создавать приложения так, как им нужно.
Особенности
Легковесный и быстрый.
Поддержка middleware для расширения функционала.
Упрощенная маршрутизация.
Служебные методы HTTP для обработки ответов.
Установка
Для установки NPM‑пакета Express достаточно использовать следующую команду:
npm install express
Как он работает?
Express обеспечивает гибкую маршрутизацию с помощью таких методов, как app.get () и app.post (), и middleware‑функций, таких как express.json (), для таких задач, как парсинг JSON, защита данных и логирование. Вспомогательные методы res.send () и res.json () упрощают отправку HTML‑ или JSON‑ответов.
Вот пример простого сервера Express с двумя маршрутами:
const express = require('express');
const app = express();
app.use(express.json()); // Middleware для обработки JSON-тела запроса.
// Маршрут для обработки GET-запросов.
app.get('/', (req, res) => {
res.send('Welcome to the Express web server!');
});
// Маршрут для обработки POST-запросов.
app.post('/submit', (req, res) => {
const data = req.body;
res.send(Data received: ${JSON.stringify(data)} );
});
Рабочую демонстрацию Express можно найти на StackBlitz.
Современная альтернатива: Fastify
Хотя Express.js по‑прежнему остается самым популярным веб‑фреймворком для Node.js, сегодня многие проекты делают выбор в пользу Fastify — быстрого и лёгкого фреймворка нового поколения. Fastify особенно популярен благодаря отличной производительности, встроенным возможностям валидации данных и нативной поддержке TypeScript.
Высокая производительность (по тестам, существенно быстрее Express).
Простая интеграция с TypeScript и автоматическая генерация типов.
Удобная система плагинов и middleware.
Встроенная JSON‑сериализация и поддержка схем для валидации запросов.
Установка
npm install fastify
Пример использования Fastify:
const fastify = require('fastify')({ logger: true });
// Определение маршрута для GET-запроса
fastify.get('/', async (request, reply) => {
return { message: 'Welcome to Fastify!' };
});
// Запуск сервера
fastify.listen({ port: 3000 }, (err, address) => {
if (err) {
fastify.log.error(err);
process.exit(1);
}
fastify.log.info(`Server listening at ${address}`);
});
2. Axios

Axios — это HTTP‑клиент на основе промисов, который упрощает отправку HTTP‑запросов из Node.js и браузеров. По умолчанию Axios обрабатывает промисы (специальные объекты, которые содержат свое состояние), делая получение асинхронных данных простым и читаемым.
Особенности
Обеспечивает поддержку промисов для обработки асинхронных запросов.
Автоматическое преобразование данных запроса/ответа (по умолчанию JSON).
Перехватчики для изменения чего‑либо в запросе или ответе.
Прерывает сбои запросов с помощью встроенной системы обработки ошибок.
Установка
Для установки NPM‑пакета Axios достаточно использовать следующую команду:
npm install axios
Как он работает?
Axios берет на себя автоматизацию таких задач, как преобразование данных в JSON и обработка ошибок. Например, если разработчик получает данные с помощью метода axios.get (), он автоматически парсит ответ в JavaScript‑объект.
axios.get('https://api.example.com/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
С помощью перехватчиков (interceptors) Axios вы можете изменять запросы и ответы, например, добавлять токены аутентификации или вести логи. Ниже приведен пример с заголовками аутентификации.
axios.interceptors.request.use(config => {
config.headers.Authorization = 'Bearer token';
return config;
});
Рабочую демонстрацию Axios можно найти на StackBlitz.
Нативная альтернатива Axios: Fetch API (Node.js 18+)
Начиная с версии Node.js 18, в платформе появился встроенный API fetch, ранее доступный только в браузерах. Это позволяет вам отправлять HTTP‑запросы без необходимости установки дополнительных пакетов вроде Axios, особенно в небольших проектах.
Пример использования fetch в Node.js:
Пример использования fetch в Node.js:
// GET-запрос с использованием fetch
fetch('https://api.example.com/data')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
// Использование async/await
async function fetchData() {
try {
const res = await fetch('https://api.example.com/data');
const data = await res.json();
console.log(data);
} catch (err) {
console.error(err);
}
}
fetchData();
Тем не менее, Axios по‑прежнему остаётся полезным выбором в сложных сценариях, требующих дополнительных функций, таких как перехватчики, отмена запросов и автоматическая сериализация.
3. Mongoose

Mongoose — это ORM‑библиотека MongoDB для Node.js. Она позволяет разработчикам определять формат, в котором должны храниться данные MongoDB, и предоставляет простой способ взаимодействия с MongoDB через JavaScript‑объекты.
Особенности
Моделирование данных на основе схем.
Встроенная проверка данных.
Обработка сложной логики с помощью middleware.
Построение запросов и популирование на основе отношений.
Установка
Для установки NPM‑пакета Mongoose достаточно использовать следующую команду:
npm install mongoose
Как он работает?
Mongoose работает со схемами, которые определяют структуру хранимых в БД данных. Схема в Mongoose сопоставляется с коллекцией MongoDB и определяет форму документов в этой коллекции. После определения схемы модели Mongoose позволяют разработчикам легко выполнять операции создания, чтения, обновления и удаления данных.
Определение схемы в Mongoose выглядит следующим образом:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
name: String,
email: String,
age: Number
});
В этой схеме Mongoose определяет, что каждый документ в коллекции пользователей будет содержать поля имени, электронной почты и возраста.
Mongoose также заботится о валидации:
const userSchema = new Schema({
name: { type: String, required: true },
email: { type: String, required: true },
age: { type: Number, min: 0 }
});
Теперь каждый раз, когда вы пытаетесь сохранить пользовательский документ, Mongoose будет настаивать на том, что ваше имя и электронная почта обязательны, а ваш возраст должен быть положительным числом.
Middleware‑функции Mongoose выполняются на различных этапах жизненного цикла запроса (до или после сохранения, обновления документа и т. д.). Например, вы можете добавить middleware, которое автоматически обновляет таймстэмп перед сохранением документа. Выглядеть это будет следующим образом:
userSchema.pre('save', function(next) {
this.updatedAt = Date.now();
next();
});
4. Prisma

Prisma — это популярный ORM нового поколения, существенно упрощающий работу с базами данных в Node.js‑проектах. Prisma отличается декларативной схемой данных, автоматической генерацией безопасных типов (что особенно удобно при работе с TypeScript) и удобными инструментами для миграций.
Особенности
Простая декларативная схема для описания моделей и отношений.
Автоматическая генерация строго типизированного клиентского API.
Поддержка современных баз данных, включая PostgreSQL, MySQL, SQLite, MongoDB и другие.
Мощная CLI и удобные инструменты миграций данных.
Установка
Для установки NPM‑пакета Sequelize достаточно использовать следующую команду:
npm install @prisma/client
npm install prisma --save-dev
npx prisma init
Как он работает?
Определите модель данных в файле schema.prisma:
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
authorId Int
author User @relation(fields: [authorId], references: [id])
}
После создания схемы и выполнения миграций (npx prisma migrate dev) можно использовать Prisma‑клиент для работы с базой данных:
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function createUser() {
const user = await prisma.user.create({
data: {
email: 'alice@example.com',
name: 'Alice'
}
});
console.log(user);
}
createUser();
Sequelize (альтернативный ORM)
Ранее популярный Sequelize также по‑прежнему используется многими проектами и предоставляет поддержку MySQL, PostgreSQL, SQLite и MariaDB. Однако сегодня он постепенно уступает место Prisma, особенно в TypeScript‑проектах.
5. Socket.io

Socket.io— это библиотека, обеспечивающая двунаправленную связь между веб‑клиентами и серверами в режиме реального времени. Хорошим примером могут служить чат‑приложения, уведомления в реальном времени или многопользовательские игры.
Особенности
Обеспечивает связь в режиме реального времени на основе событий.
Поддерживает протокол WebSocket с возможностью fallback«а.
Работает на множестве разных платформ и устройств.
Простая интеграция с Node.js‑серверами.
Установка
Для установки NPM‑пакета Socket.io достаточно использовать следующую команду:
npm install socket.io
Как он работает?
Ниже представлен пример чата, в котором пользователи могут отправлять сообщения другим пользователям в режиме реального времени. Сервер будет прослушивать входящие соединения от клиента. Он отправляет приветственное сообщение, когда соединение установлено, а затем транслирует сообщения чата всем подключенным в данный момент клиентам.
Серверная сторона (Node.js):
const io = require('socket.io')(3000);
io.on('connection', socket => {
console.log('A user connected');
socket.emit('message', 'Welcome to the chat!');
socket.on('chatMessage', msg => {
io.emit('message', msg); // Передача сообщения всем клиентам
});
socket.on('disconnect', () => {
console.log('User disconnected');
});
});
Клиентская сторона (HTML/JavaScript):
const socket = io('http://localhost:3000');
socket.on('message', message => {
console.log(message);
});
document.getElementById('sendButton').addEventListener('click', () => {
const msg = document.getElementById('messageInput').value;
socket.emit('chatMessage', msg);
});
Рабочую демонстрацию Socket.io можно найти на StackBlitz.
6. Vite

Vite — это чрезвычайно быстрый инструмент сборки JavaScript‑приложений и сервер разработки нового поколения. Он завоевал широкую популярность среди frontend‑разработчиков благодаря мгновенной перезагрузке модулей (HMR), минимальной конфигурации и отличной поддержке современных фреймворков, таких как React, Vue, Svelte и других.
Основные преимущества Vite:
Очень быстрая сборка и запуск проекта благодаря использованию нативных ES‑модулей.
Встроенная поддержка TypeScript и JSX.
Простая интеграция с React, Vue, Angular, Svelte и другими фреймворками.
Минимальное количество конфигурации.
Установка
Создание нового проекта с React на основе Vite выполняется одной командой:
npm create vite@latest my-react-app -- --template react
cd my-react-app
npm install
npm run dev
Как он работает?
Vite использует подход с нативной поддержкой ES‑модулей для ускорения запуска приложений:
Пример минимального проекта с использованием Vite выглядит так:
Структура проекта:
my-react-app/
├── index.html
├── src/
│ ├── App.jsx
│ └── main.jsx
├── vite.config.js
└── package.json
vite.config.js (минимальный пример):
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
});
Структура проекта:
npm run build
Webpack (альтернативный сборщик)
Ранее широко использовавшийся Webpack сегодня постепенно уступает место более современным и быстрым инструментам, таким как Vite. Тем не менее, он всё ещё встречается в проектах с более сложной конфигурацией.
7. Jest

Jest — это мощная платформа тестирования от Facebook, созданная с прицелом на максимальную простоту использования. Jest предлагает полный набор функций тестирования, таких как тестовые утверждения, мокинг и snapshot‑тестирование, а также готовые решения для модульных, интеграционных и сквозных тестов. Довольно простой в использовании, Jest также может без настройки работать прямо из коробки со многими библиотеками и фреймворками JavaScript, включая React и Node.js.
Особенности
Отсутствие необходимости что‑либо настраивать для большинства проектов.
Встроенные утверждения и программа запуска тестов.
Snapshot‑тестирование для компонентов пользовательского интерфейса.
Моки и шпионы (spies) для тестирования сложных функций.
Установка
Для установки NPM‑пакета Jest достаточно использовать следующую команду:
npm install --save-dev jest
Как он работает?
Вот базовый тест с использованием Jest, проверяющий, правильно ли функция складывает два числа:
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
// sum.test.js
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Вы можете найти рабочую демонстрацию Jest на StackBlitz.
Научиться всем необходимым навыкам и инструментам, чтобы с нуля стать Fullstack-разработчиком, можно на онлайн‑специализации »Fullstack developer».
Современная альтернатива: Vitest
Стоит отметить, что сейчас активно развивается Vitest — новая и быстрая платформа тестирования, совместимая с Jest по API, но предлагающая улучшенную производительность и нативную интеграцию с современными инструментами сборки, такими как Vite и ESBuild.
Чтобы попробовать Vitest в своем проекте, выполните команду:
npm install --save-dev vitest
Пример базового теста с Vitest выглядит практически идентично Jest:
// sum.js
export const sum = (a, b) => a + b;
// sum.test.js
import { sum } from './sum';
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
8. JsonWebTokens (JWT)

JsonWebToken — одна из самых популярных библиотек Node.js для аутентификации на основе токенов. Она предоставляет компактное средство для безопасной передачи информации. JWT имеют цифровую подпись и широко используются для stateless аутентификации, избавляя сервер от необходимости хранить данные о сеансе.
Особенности
Безопасная передача данных между сторонами.
Аутентификация без сохранения данных, что снижает нагрузку на сервер.
Поддерживаются как подписанные, так и зашифрованные токены.
Хорошо работает с различными фреймворками аутентификации, такими как Passport.
Установка
Для установки NPM‑пакета JWT достаточно использовать следующую команду:
npm install jsonwebtoken
Как он работает?
В следующем примере создается JWT, содержащий полезную нагрузку userId: 123. Он подписывает токен секретным ключом и устанавливает срок его действия в 1 час. Теперь, когда клиент отправляет токен обратно на ваш сервер, ваш сервер может проверить, что токен подлинный и не изменен, поскольку он был подписан правильным секретным ключом. Функция jwt.verify проверяет подпись токена и срок его действия. Если токен действителен, она возвращает декодированную полезную нагрузку, позволяя серверу получить доступ к userId и любой другой информации, содержащейся в токене. Если токен недействителен или срок его действия истек, возвращается ошибка, предотвращающая несанкционированный доступ.
const jwt = require('jsonwebtoken');
const token = jwt.sign({ userId: 123 }, 'your-secret-key', { expiresIn: '1h' });
console.log(token);
jwt.verify(token, 'your-secret-key', (err, decoded) => {
if (err) {
console.log('Invalid token');
} else {
console.log('Valid token:', decoded);
}
});
Рабочую демонстрацию JsonWebTokens можно найти на StackBlitz.
9. Cors
CORS расшифровывается как Cross‑Origin Resource Sharing. Это то, что разработчики браузеров внедряют в качестве защиты, не позволяющей веб‑страницам обращаться к доменам, отличным от их собственных. Пакет CORS в Node.js настраивает домены, которым разрешено взаимодействовать с вашим API. Это особенно полезно при размещении клиента и сервера на разных доменах или портах. Вы можете быть уверены, что обмен данными между источниками происходит безопасно и под контролем.
Особенности
Обеспечивает легкую настройку cross‑origin политик.
Позволяет настраивать определенные домены, методы и заголовки.
Поддержка предварительных запросов для метода OPTIONS.
Установка
Для установки NPM‑пакета CORS достаточно использовать следующую команду:
npm install cors
Как он работает?
Вот как можно разрешить в CORS все домены:
const cors = require('cors');
const express = require('express');
const app = express();
app.use(cors()); // Включаем CORS для всех источников.
Вы также можете настроить CORS так, чтобы были разрешены только определенные домены:
app.use(cors({
origin: 'https://example.com' // Разрешаем только этот домен.
}));
Кроме того, вы можете указать другие параметры, например разрешенные методы HTTP или заголовки.
app.use(cors({
origin: 'https://example.com',
methods: ['GET', 'POST'],
allowedHeaders: ['Content-Type', 'Authorization']
}));
Рабочую демонстрацию CORS можно найти на сайте StackBlitz.
10. Lodash

Lodash — это служебная библиотека на JavaScript для глубокого клонирования, манипуляций с массивами, слияния объектов и многого другого. Она облегчает жизнь разработчикам при работе со сложными преобразованиями данных, позволяя им писать более чистый и эффективный код.
Особенности
Глубокое клонирование объектов и массивов.
Функции для работы с массивами и объектами.
Оптимизированная производительность для работы с большими массивами данных.
Вспомогательные функции из функционального программирования (например, map, reduce, filter).
Установка
Для установки NPM‑пакета Lodash достаточно использовать следующую команду:
npm install lodash
Как он работает?
Lodash предоставляет множество служебных функций, облегчающих работу со стандартными структурами данных JavaScript. Одной из самых мощных функций является поддержка глубокого клонирования — способа получения реальной копии объекта или массива с сохранением вложенных данных.
Пример глубокого клонирования объекта:
const _ = require('lodash');
const original = { name: 'Mark', age: 30, nested: { city: 'London' } };
const clone = _.cloneDeep(original);
console.log(clone); // Вывод: { name: 'Mark', age: 30, nested: { city: 'London' } }
Среди остальных приятных утилит для работы с массивами, доступных в Lodash, можно выделить _.chunk (). chunk разбивает массив на части заданного размера:
const array = [1, 2, 3, 4, 5, 6];
const chunked = _.chunk(array, 2);
console.log(chunked); // Вывод: [[1, 2], [3, 4], [5, 6]]
В дополнение к этим утилитам Lodash предоставляет функции для работы с объектами, массивами и строками в стиле функционального программирования, что делает ваш код более лаконичным и удобным для чтения.
Можно ли сегодня обойтись без Lodash?
Lodash продолжает широко использоваться в проектах, где необходимо работать со сложными структурами данных или осуществлять глубокое клонирование. Однако в современном JavaScript появилось много встроенных методов, которые делают использование Lodash необязательным во многих случаях.
Вот несколько примеров популярных методов Lodash и их нативных аналогов:
_.cloneDeep (obj) → structuredClone (obj) (глубокий клон) или {…obj } (неглубокий клон)
_.chunk (arr, size) → можно реализовать вручную через цикл и метод.slice ()
_.merge (obj1, obj2) → {…obj1,…obj2 } (поверхностное слияние)
_.uniq (arr) → […new Set (arr)]
_.debounce (fn, delay) → можно реализовать вручную через использование setTimeout и clearTimeout
Вывод: Используйте Lodash, когда это действительно оправдано (например, глубокая работа с вложенными объектами). В остальных случаях нативный JavaScript может предложить вам аналогичные и более легкие по размеру решения.
Вы можете найти рабочую демонстрацию Lodash на StackBlitz.
11. Bcrypt
Bcrypt — одна из самых востребованных библиотек для хеширования паролей в Node.js. Она обеспечивает защищенный метод хеширования и сравнения паролей, что очень важно для защиты пользовательских данных в приложениях, использующих аутентификацию.
Особенности
Защищенное хэширование паролей.
Автоматический salting для усиления хэшей паролей.
Поддерживает сравнение паролей.
Устойчивость к brute‑force атакам.
Установка
Для установки NPM‑пакета Bcrypt достаточно использовать следующую команду:
npm install bcryptjs
Как он работает?
В основе работы Bcrypt лежит механизм хеширования пароля и хранения его в базе данных. При входе в систему введенный пароль сравнивается с сохраненным хэшем.
Вот как выглядит хэширование пароля с помощью Bcrypt:
const bcrypt = require('bcryptjs');
const password = 'myPassword123';
bcrypt.hash(password, 10, (err, hash) => {
if (err) throw err;
console.log(hash); // Хешированный пароль
});
Чтобы сравнить пароль с сохраненным хэшем:
bcrypt.compare('myPassword123', hash, (err, res) => {
if (res) {
console.log('Password matches');
} else {
console.log('Password does not match');
}
});
Рабочую демонстрацию Bcrypt можно найти на StackBlitz.
12. Dotenv

Dotenv — это популярный NPM‑пакет для поддержки переменных окружения в приложениях Node.js. Он позволяет надежно хранить конфиденциальные данные, такие как ключи API или учетные данные баз данных, вне основной кодовой базы, сохраняя чистоту и защищенность конфигурации.
Особенности
Загружает переменные окружения из файла.env в файл process.env.
Обеспечивает защищенность конфиденциальных данных и отделяет их от вашего кода.
Работает в различных средах (разработка, тестирование, производство).
Установка
Для установки NPM‑пакета Dotenv достаточно использовать следующую команду:
npm install dotenv
Как он работает?
Чтобы использовать Dotenv, создайте файл.env в корне проекта и определите переменные окружения:
DATABASE_URL=postgres://user:password@localhost:5432/mydb
API_KEY=123456789abcdef
Затем в своем приложении загрузите эти переменные с помощью Dotenv:
require('dotenv').config();
console.log(process.env.DATABASE_URL); // Вывод: postgres://user:password@localhost:5432/mydb
Вы можете создавать отдельные файлы.env для управления различными окружениями. Вы можете легко менять окружения, не трогая кодовую базу.
Рабочую демонстрацию Dotenv можно найти на StackBlitz.
13. Pino

Pino — это очень быстрая библиотека логирования для Node.js‑приложений, завоевавшая популярность благодаря минималистичному подходу, высокой производительности и простоте использования. Pino особенно полезен в высоконагруженных проектах, где производительность логирования влияет на общую скорость работы приложения.
Особенности
Высокая производительность (в десятки раз быстрее Winston как основного предшественника).
Простой и лаконичный API.
Удобная интеграция с внешними сервисами логирования.
Минимальные накладные расходы на ресурсы приложения.
Установка
Для установки NPM‑пакета Pino достаточно использовать следующую команду:
npm install pino
Для красивого вывода логов в консоль можно использовать pino‑pretty:
npm install pino-pretty --save-dev
Как он работает?
Пример простого логирования с помощью Pino выглядит следующим образом:
const pino = require('pino');
const logger = pino({
level: 'info',
transport: {
target: 'pino-pretty'
}
});
logger.info('Приложение успешно запущено.');
logger.error('Произошла ошибка при обработке запроса.');
Также Pino поддерживает структурированное логирование:
logger.info({ userId: 123, action: 'login' }, 'Пользователь вошёл в систему.');
Winston (альтернатива для логирования)
Ранее популярная библиотека Winston по‑прежнему используется во многих приложениях благодаря широким возможностям и разнообразию плагинов. Однако сегодня предпочтение часто отдают более быстрым и лёгким решениям, таким как Pino.
14. Morgan
Morgan — это middleware для регистрации HTTP‑запросов для Node.js. Он регистрирует все HTTP‑запросы к вашему серверу в формате, который вы определяете сами. Вероятно, он наиболее известен благодаря использованию в приложениях Express для регистрации входящих запросов, чтобы отслеживать трафик и помогать отлаживать проблемы, записывая подробную информацию о каждом запросе, включая метод запроса, URL запроса, время ответа и статус ответа.
Особенности
Протоколирование HTTP‑запросов для приложений Express.
Предопределенные форматы логов (например, комбинированный, общий, dev).
Настраиваемые строки формата лога.
Возможность отображать в логах дополнительную информацию, например время ответа и код состояния.
Установка
Для установки NPM‑пакета Morgan достаточно использовать следующую команду:
npm install morgan
Как он работает?
Вот выглядит использование Morgan с Express‑приложением:
const morgan = require('morgan');
const express = require('express');
const app = express();
// Используем комбинированный формат логов
app.use(morgan('combined'));
app.get('/', (req, res) => {
res.send('Hello, Morgan!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
В приведенном выше примере показано, как Morgan устанавливает логирование для каждого входящего HTTP‑запроса в комбинированном формате, включая удаленный IP, метод — URL, время ответа и код состояния. Morgan также позволяет определять пользовательские форматы логов, указывая строку формата. Например, вы можете записывать в логи только метод запроса, URL и код состояния:
app.use(morgan(':method :url :status'));
Рабочую демонстрацию Morgan можно найти на сайте StackBlitz.
15. Day.js

Day.js — это современная и лёгкая JavaScript‑библиотека для работы с датами и временем, которая появилась как альтернатива устаревшему Moment.js. Она имеет почти такой же API, как Moment.js, но обладает существенно меньшим размером и лучшей производительностью.
Особенности
Минимальный размер (всего ~2kb gzip).
Практически идентичный Moment.js синтаксис.
Модульная структура с возможностью подключать только необходимые плагины.
Поддержка часовых поясов и локализаций.
Установка
Для установки NPM‑пакета Day.js используйте следующую команду:
npm install dayjs
Как он работает?
Пример работы с Day.js
// Получение текущей даты и времени
const now = dayjs();
// Форматирование даты
console.log(now.format('MMMM D, YYYY h:mm A'));
// Добавление времени
console.log(now.add(1, 'week').format('MMMM D, YYYY'));
Рабочую демонстрацию Day.js можно найти на сайте StackBlitz.
16. Zod

Zod — это мощная и удобная библиотека для валидации и преобразования данных в Node.js и TypeScript. Она позволяет вам описывать структуры данных с помощью простого, лаконичного API и автоматически генерировать TypeScript‑типы, делая ваш код одновременно безопасным и чистым.
Особенности
Отличная интеграция с TypeScript с автоматической генерацией типов.
Удобный и лаконичный API для описания схем данных.
Мощная валидация, включая поддержку кастомных правил и преобразований данных.
Минимальный размер и отсутствие зависимостей.
Установка
Для установки NPM‑пакета Zod достаточно использовать следующую команду:
npm install zod
Как он работает?
const { z } = require('zod');
// Описание схемы данных
const userSchema = z.object({
username: z.string().min(3, { message: 'Username должен содержать не менее 3 символов' }),
email: z.string().email({ message: 'Некорректный формат email' }),
age: z.number().int().positive().optional(),
});
// Проверка входящих данных (например, от пользователя)
const inputData = {
username: 'john_doe',
email: 'john@example.com',
age: 28,
};
const validationResult = userSchema.safeParse(inputData);
if (!validationResult.success) {
console.error(validationResult.error.format());
} else {
console.log('Проверенные данные:', validationResult.data);
}
Joi (альтернатива для валидации данных)
Ранее очень популярная библиотека Joi продолжает использоваться в существующих Node.js‑проектах для описания схем валидации и проверки данных. Однако сегодня более актуальным и современным решением для новых проектов является Zod, особенно благодаря лучшей интеграции с TypeScript и простоте API.
17. Дополнительные тренды: альтернативные среды выполнения JavaScript
Помимо Node.js, в 2025 году заметно растёт популярность альтернативных сред выполнения JavaScript:
Bun
Bun — это современная среда выполнения JavaScript, созданная с прицелом на максимальную производительность. Она отличается встроенной поддержкой TypeScript, быстрой сборкой проектов и совместимостью с существующими NPM‑пакетами.
Установка и запуск Bun:
curl -fsSL https://bun.sh/install | bash
Простой запуск JavaScript‑файла:
bun run index.js
Deno
Deno — среда выполнения JavaScript и TypeScript, созданная автором Node.js. Отличается встроенной безопасностью, отсутствием необходимости использовать NPM (хотя совместимость уже реализована) и нативной поддержкой Web API.
Простой запуск JavaScript‑файла:
deno run index.js
Обе среды активно развиваются и представляют интересную альтернативу для современных проектов.
Заключение
Экосистема NPM предоставляет Node.js‑разработчикам универсальный набор пакетов для оптимизации процесса разработки, расширения функциональности и упрощения сложных задач. От Express для веб‑фреймворков до Joi для валидации данных — эти пакеты охватывают важнейшие области разработки современных приложений. Эти популярные NPM‑пакеты позволяют разработчикам создавать более производительные, масштабируемые и поддерживаемые приложения, что, в свою очередь, повышает их качество.
Материал подготовлен в рамках онлайн-специализации «Fullstack developer». На странице специализации можно ознакомиться с подробной программой, а также посмотреть записи открытых уроков.