Что такое Chalk и зачем он нужен?
Chalk — это одна из самых популярных библиотек для Node.js, предназначенная для стилизации вывода в терминале (консоли). Если вы когда-нибудь писали console.log() и хотели, чтобы текст был цветным, жирным, подчёркнутым или мигающим — Chalk решает эту задачу элегантно и просто.
Зачем это нужно? В реальных проектах цветной вывод помогает:
- Визуально разделять логи (ошибки красным, предупреждения жёлтым, успех зелёным).
- Улучшать UX CLI-утилит и скриптов.
- Акцентировать внимание на важных сообщениях.
- Делать вывод более читаемым в длинных логах.
Chalk не использует зависимости, работает быстро и поддерживает цепочки вызовов (chaining). Он автоматически определяет, поддерживает ли терминал цвета, и при необходимости отключает стилизацию (например, при перенаправлении вывода в файл).
Установка
Chalk распространяется через npm. Установите его в свой проект:
npm install chalk
Если вы используете yarn:
yarn add chalk
После установки импортируйте библиотеку в свой скрипт:
const chalk = require('chalk');
Для проектов, использующих ES-модули (type: "module" в package.json), импорт выглядит так:
import chalk from 'chalk';
Важно: Начиная с версии Chalk 5.0, библиотека стала ESM-only (только для ES-модулей). Если вы используете CommonJS (require), устанавливайте версию 4.x:
npm install chalk@4.1.2
Быстрый старт
Попробуем первый пример. Создайте файл example.js и напишите:
const chalk = require('chalk');
console.log(chalk.blue('Hello, world!'));
console.log(chalk.red.bold('Ошибка!'));
console.log(chalk.green.underline('Успех'));
console.log(chalk.yellow.bgBlue('Жёлтый текст на синем фоне'));
Запустите:
node example.js
Вы увидите цветной вывод. Если цвета не отображаются, проверьте, поддерживает ли ваш терминал ANSI-цвета (современные терминалы поддерживают).
Основные методы и функции
Chalk предоставляет два типа API: методы-модификаторы (стили текста) и методы-цвета (цвет текста и фона). Все они могут комбинироваться через цепочки вызовов.
1. chalk.red() — красный цвет текста
Что делает: Окрашивает текст в красный цвет. Чаще всего используется для сообщений об ошибках.
Параметры: Принимает строку или несколько строк (через запятую, объединит их).
console.log(chalk.red('Ошибка: файл не найден'));
console.log(chalk.red('Критическая', 'ошибка', 'системы')); // объединит через пробел
2. chalk.green() — зелёный цвет текста
Что делает: Окрашивает текст в зелёный цвет. Используется для сообщений об успехе.
Параметры: Аналогично red.
console.log(chalk.green('Операция выполнена успешно'));
console.log(chalk.green('✓', 'Готово'));
3. chalk.blue() — синий цвет текста
Что делает: Окрашивает текст в синий цвет. Часто используется для информационных сообщений.
Параметры: Строка или несколько строк.
console.log(chalk.blue('Информация: версия 2.0.1'));
4. chalk.yellow() — жёлтый цвет текста
Что делает: Окрашивает текст в жёлтый цвет. Традиционно используется для предупреждений.
Параметры: Строка или несколько строк.
console.log(chalk.yellow('Предупреждение: низкий заряд батареи'));
5. chalk.bold() — жирный текст
Что делает: Делает текст жирным (bold). Можно комбинировать с цветами.
Параметры: Строка.
console.log(chalk.bold('Этот текст будет жирным'));
console.log(chalk.red.bold('Жирная ошибка')); // комбинация с цветом
6. chalk.underline() — подчёркнутый текст
Что делает: Подчёркивает текст.
Параметры: Строка.
console.log(chalk.underline('Подчёркнутый текст'));
console.log(chalk.blue.underline('Синий подчёркнутый текст'));
7. chalk.bgRed() — красный фон
Что делает: Устанавливает красный цвет фона для текста.
Параметры: Строка.
console.log(chalk.bgRed('Текст на красном фоне'));
console.log(chalk.bgRed.white('Белый текст на красном фоне')); // комбинация
8. chalk.bgGreen() — зелёный фон
Что делает: Устанавливает зелёный цвет фона.
Параметры: Строка.
console.log(chalk.bgGreen('Текст на зелёном фоне'));
9. chalk.italic() — курсив
Что делает: Делает текст курсивным. Работает не во всех терминалах.
Параметры: Строка.
console.log(chalk.italic('Курсивный текст (может не поддерживаться)'));
10. chalk.dim() — тусклый текст
Что делает: Делает текст менее ярким (dim). Полезно для второстепенной информации.
Параметры: Строка.
console.log(chalk.dim('Этот текст будет тусклым'));
console.log(chalk.gray.dim('Серый тусклый текст'));
11. chalk.strikethrough() — зачёркнутый текст
Что делает: Перечёркивает текст.
Параметры: Строка.
console.log(chalk.strikethrough('Этот текст зачёркнут'));
12. chalk.hex() — произвольный HEX-цвет
Что делает: Позволяет задать любой цвет через HEX-код. Очень гибкая функция.
Параметры: Строка — HEX-код цвета (например, '#FF5733').
console.log(chalk.hex('#FF5733')('Оранжевый текст'));
console.log(chalk.hex('#8E44AD').bold('Фиолетовый жирный текст'));
13. chalk.rgb() — произвольный RGB-цвет
Что делает: Задаёт цвет текста через RGB-компоненты.
Параметры: Три числа: r, g, b (от 0 до 255).
console.log(chalk.rgb(255, 87, 51)('Текст цвета rgb(255, 87, 51)'));
console.log(chalk.rgb(100, 200, 50).underline('Зеленоватый подчёркнутый текст'));
14. chalk.bgHex() и chalk.bgRgb() — произвольный цвет фона
Что делает: Аналогично hex и rgb, но для фона.
Параметры: Для bgHex — строка HEX, для bgRgb — три числа.
console.log(chalk.bgHex('#FFC300')('Жёлтый фон'));
console.log(chalk.bgRgb(50, 50, 200).white('Белый текст на синем фоне'));
Реальный практический пример
Представим, что мы пишем CLI-утилиту для проверки здоровья сервера. Создадим файл health-check.js:
const chalk = require('chalk');
function checkService(name, isOk) {
const status = isOk
? chalk.green.bold('✓ ONLINE')
: chalk.red.bold('✗ OFFLINE');
console.log(`${chalk.blue(name)}: ${status}`);
}
function printHeader() {
console.log(chalk.bold.underline('Health Check Report'));
console.log(chalk.dim(new Date().toLocaleString()));
console.log(chalk.gray('─'.repeat(40)));
}
function printSummary(okCount, total) {
const percent = Math.round((okCount / total) * 100);
let color;
if (percent === 100) color = chalk.green;
else if (percent >= 70) color = chalk.yellow;
else color = chalk.red;
console.log(chalk.gray('─'.repeat(40)));
console.log(color.bold(`Итого: ${okCount}/${total} сервисов работают (${percent}%)`));
}
// Использование
printHeader();
checkService('Web Server', true);
checkService('Database', true);
checkService('Cache', false);
checkService('Queue', true);
printSummary(3, 4);
Запустите: node health-check.js. Вы увидите красивый отформатированный отчёт с цветами и статусами.
Советы и типичные ошибки
Советы:
- Используйте цепочки вызовов:
chalk.red.bold.underline('текст')— это удобно и читаемо. - Создавайте свои пресеты: Если вы часто используете одну комбинацию, сохраните её в переменную:
const error = chalk.bold.red; const success = chalk.green.underline; console.log(error('Ошибка!')); console.log(success('Готово!')); - Проверяйте поддержку цвета: Chalk автоматически отключает цвета, если вывод перенаправляется в файл. Но вы можете принудительно включить:
chalk.level = 1(уровни: 0 — нет цвета, 1 — 16 цветов, 2 — 256 цветов, 3 — true color). - Используйте
chalk.inverse(): Этот метод меняет местами цвет текста и фона. - Для больших проектов: Рассмотрите библиотеки-обёртки, например
kleur(быстрее) илиcolors(проще, но устарела).
Типичные ошибки:
- Забыли установить Chalk:
Error: Cannot find module 'chalk'— проверьтеpackage.json. - Использование ES-импорта в CommonJS: Если вы используете
import chalk from 'chalk'без"type": "module"в package.json, получите ошибку. Либо переключитесь на модули, либо использу