Node.js pipeline: сжать файл и обработать ошибки потока
pipeline из node:stream/promises соединяет читаемый поток, преобразователь и поток записи. Он передаёт данные частями, учитывает backpressure и возвращает Promise, который завершается после записи или отклоняется при ошибке.
Сжать файл через поток
import { createReadStream, createWriteStream } from 'node:fs';
import { pipeline } from 'node:stream/promises';
import { createGzip } from 'node:zlib';
await pipeline(
createReadStream('access.log'),
createGzip(),
createWriteStream('access.log.gz', { flags: 'wx' }),
);Ключ wx не даёт случайно перезаписать существующий access.log.gz: если файл уже есть, операция завершится ошибкой. pipeline закрывает связанные потоки при сбое и отклоняет Promise; обработайте эту ошибку на верхнем уровне приложения. После сбоя частичный файл назначения может остаться, поэтому проверьте его перед удалением или повторной попыткой. API node:stream/promises доступно начиная с Node.js 15.
Пример записывает новый файл рядом с исходным. Проверьте свободное место и не указывайте важный файл как цель без резервной копии.
Официальная документация: Streams Promises API.