
Сборка Node.js-приложения: как делать правильно в 2024
Почему npm install в Dockerfile раздувает образ до гигабайта, зачем нужны две стадии сборки и чем npm ci отличается от npm install на CI.

Почему npm install в Dockerfile раздувает образ до гигабайта, зачем нужны две стадии сборки и чем npm ci отличается от npm install на CI.

Флаки-тесты, забытый await, общее состояние между кейсами и таймеры, которые никто не мокал. Разбираем ошибки, из-за которых зелёный прогон ничего не подтверждает.

Как снимать метрики с Node.js-сервиса через prom-client, не блокируя event loop, что именно мерить помимо CPU и почему ваш RPS-график врёт, если считать его в обработчике.

console.log отъедает CPU под нагрузкой и не даёт структуры для поиска. Разбираем, чем платят Winston, Pino и Bunyan, и когда какой выбрать.

In-memory кеш в одном процессе Node.js держался до 40 rps, а на четырёх воркерах кластера начал отдавать устаревшие данные. Разбираем, почему так вышло и чем платить за каждое решение.

Отправка письма прямо в обработчике HTTP кладёт время ответа в зависимость от чужого SMTP. Разбираем, как вынести долгие задачи в очередь и не потерять их при перезапуске процесса.

Что проверить в слое валидации Node.js-приложения: границы, типы, вложенные объекты, санитизация. Разбор частых дыр и сравнение Zod, Joi и express-validator.

fetch, undici, axios и got решают одну задачу по-разному. Разбираем, чем платишь за каждый подход, где утекают сокеты и почему запрос без таймаута однажды подвесит сервис.

Синхронный fs в обработчике запроса, чтение гигабайтного лога в память, гонки при записи и молчаливое проглатывание ошибок — разбираем, где именно рушится работа с файлами в Node.js и чем это лечить.

Как читать гигабайтные файлы без OutOfMemory, соединять источники через pipeline и не потерять ошибки в середине цепочки. Разбираем backpressure, объектные стримы и типичные утечки.

Парсинг строки без часового пояса, сложение месяцев, разница между датами — три места, где нативный Date молча даёт неверный результат. Разбираем, где он ломается и чем закрыть.

new Date('2024-03-15') и new Date('2024-03-15 00:00') дают разное время. Разбираем, почему нативные даты в JS подводят и что с этим делать в 2024 году.