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». На странице специализации можно ознакомиться с подробной программой, а также посмотреть записи открытых уроков.
ссылка на оригинал статьи https://habr.com/ru/articles/893908/
Добавить комментарий