На главную

Цветной вывод в Node.js


Сегодня разберём, как обойтись без chalk, colors, picocolors и прочего «цветного зоопарка» и при этом получить аккуратный, читаемый вывод в терминале.

В версиях Node v21.0–v21.3 console.error() автоматически выводил текст красным, а console.warn() — жёлтым:

console.error('Фатальная ошибка!'); // 🔴 красный текст
console.warn('Возможная проблема.'); // 🟡 жёлтый текст

Однако в ответ на жалобы сообщества это поведение в v21.4 убрали, вернув совместимость со старыми LTS-ветками. Отсюда совет не полагайся на автоматическую раскраску — лучше делать её явно.

С версии v21.7.0 в ядро добавили API util.styleText(), и с его помощью можно выводить любой цвет без сторонних зависимостей:

import { styleText } from 'node:util';

console.log(styleText('magenta', 'Привет, мир!')); // фиолетовый текст
console.log(styleText('bgGreen', 'Успех!')); // зелёный фон
console.log(styleText('redBright', '🔥 Срочно чиним!')); // ярко-красный

Весь список значений всегда можно проверить в официальной документации

Сброс и оформление текста

reset, bold, dim, italic, underline, doubleunderline, blink, inverse, hidden, strikethrough, framed, overlined

Нейтральные цвета (foreground)

black, red, green, yellow, blue, magenta, cyan, white, gray

Яркие цвета (foreground Bright)

redBright, greenBright, yellowBright, blueBright, magentaBright, cyanBright, whiteBright

Фоновые цвета (background)

bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bgGray

Яркие фоновые цвета (background Bright)

bgRedBright, bgGreenBright, bgYellowBright, bgBlueBright, bgMagentaBright, bgCyanBright, bgWhiteBright

Заготовка для использования в проекте

Чтобы не дублировать код цвета, можно завести мини-палитру и единый метод логирования:

import { styleText } from 'node:util';

const palette = {
  info:  'cyan',
  warn:  'yellow',
  error: 'redBright',
};

function log(level, message) {
  const color = palette[level] ?? 'white';
  console.log(styleText(color, `[${level.toUpperCase()}] ${message}`));
}

log('info',  'Собираем проект…');
log('warn',  'Используется устаревший API');
log('error', 'Билд упал!');

Источники