Как изменить цвет шрифта консоли в Node.js?
Я столкнулся с проблемой: мне пришлось изменить цвет фона консоли на белый из-за проблем со зрением, но текст шрифта стал серым, из-за чего сообщения стали нечитаемыми. Как я могу изменить цвет шрифта?
5 ответ(ов)
Этот ответ, который я нашел выше (https://stackoverflow.com/a/41407246/4808079), очень полезен, но неполон. Если вы хотите раскрасить текст только один раз, то, вероятно, это подойдет. Однако я считаю, что представление в виде исполняемого кода будет гораздо более актуальным для реальных случаев использования.
const Color = {
Reset: "\x1b[0m",
Bright: "\x1b[1m",
Dim: "\x1b[2m",
Underscore: "\x1b[4m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
Hidden: "\x1b[8m",
FgBlack: "\x1b[30m",
FgRed: "\x1b[31m",
FgGreen: "\x1b[32m",
FgYellow: "\x1b[33m",
FgBlue: "\x1b[34m",
FgMagenta: "\x1b[35m",
FgCyan: "\x1b[36m",
FgWhite: "\x1b[37m",
FgGray: "\x1b[90m",
BgBlack: "\x1b[40m",
BgRed: "\x1b[41m",
BgGreen: "\x1b[42m",
BgYellow: "\x1b[43m",
BgBlue: "\x1b[44m",
BgMagenta: "\x1b[45m",
BgCyan: "\x1b[46m",
BgWhite: "\x1b[47m",
BgGray: "\x1b[100m",
}
function colorString(color, msg) {
return `${color}${msg}${Color.Reset}`;
}
function colorLog(color, ...args) {
console.log(...args.map(
(it) => typeof it === "string" ? colorString(color, it) : it
));
}
Используйте это следующим образом:
colorLog(Color.FgYellow, "Некоторый желтый текст для вывода в консоль", { someObj: true });
console.log([
colorString(Color.FgRed, "красный"),
colorString(Color.FgGreen, "зеленый"),
colorString(Color.FgBlue, "голубой"),
].join(", "));
Таким образом, у вас есть возможность легко раскрашивать строки при выводе в консоль, что значительно расширяет применимость в реальных проектах.
Если вы хотите сделать это ПРОШЛОЕ простым, без использования сторонних модулей, изучения новых API или "взлома" основных функций console
, вы можете воспользоваться следующим решением:
const LCERROR = '\x1b[31m%s\x1b[0m'; // красный
const LCWARN = '\x1b[33m%s\x1b[0m'; // желтый
const LCINFO = '\x1b[36m%s\x1b[0m'; // голубой
const LCSUCCESS = '\x1b[32m%s\x1b[0m'; // зеленый
const logger = class {
static error(message, ...optionalParams) { console.error(LCERROR, message, ...optionalParams) }
static warn(message, ...optionalParams) { console.warn(LCWARN, message, ...optionalParams) }
static info(message, ...optionalParams) { console.info(LCINFO, message, ...optionalParams) }
static success(message, ...optionalParams) { console.info(LCSUCCESS, message, ...optionalParams) }
}
// Теперь вместо (как показано в принятом ответе)
// console.error(LCERROR, 'Ошибка в красном.');
// вы пишете:
logger.error('Ошибка в красном.');
// Или с несколькими параметрами (только сообщение будет красным):
logger.error('Ошибка в красном.', 1, false, null, {someKey: 'whatever'});
// Или используйте шаблонные строки (template literal) вместо нескольких параметров:
logger.error(`Это будет красным, как ${foo} и ${bar} тоже.`);
Теперь вы можете использовать свой logger
так же, как и console
. Никакого нового API не нужно запоминать... Обычно, вы можете поместить это в модуль (logger.js) и экспортировать class
, чтобы использовать его повсюду в вашем приложении, как const logger = require('./logger');
.
Вы можете использовать следующий однострочник для скриптов npm, где не могут быть зависимости:
const { r, g, b, w, c, m, y, k } = [
['r', 1], ['g', 2], ['b', 4], ['w', 7],
['c', 6], ['m', 5], ['y', 3], ['k', 0],
].reduce((cols, col) => ({
...cols, [col[0]]: f => `\x1b[3${col[1]}m${f}\x1b[0m`
}), {})
console.log(`${g('I')} love ${r('Italy')}`)
В этом примере r, g, b, w, c, m, y, k
обозначают красный (red), зелёный (green), синий (blue), белый (white), циановый (cyan), магенту (magenta), жёлтый (yellow) и чёрный (black), соответственно. Функции возвращают строки с соответствующими цветами для вывода в терминале.
Если вы хотите вывести текст "Error!" красным цветом в консоли без использования библиотек и с минимальными усложнениями, вы можете сделать это, используя коды ANSI. Вот пример:
console.log(red('Error!'));
function red(s) {
return '\x1b[31m' + s + '\x1b[0m';
}
Здесь \x1b[31m
устанавливает красный цвет для текста, а \x1b[0m
сбрасывает цвет обратно к умолчаниям после вывода.
Если вы хотите использовать цветной текст в терминале на OS X без зависимостей, вот простой способ сделать это. Я сталкивался с ошибками Octal literal
, при использовании примеров из других ответов, поэтому это решение сработало для меня.
Вот набор кодов для форматирования текста с использованием ANSI escape sequences:
Reset = "\x1b[0m"
Bright = "\x1b[1m"
Dim = "\x1b[2m"
Underscore = "\x1b[4m"
Blink = "\x1b[5m"
Reverse = "\x1b[7m"
Hidden = "\x1b[8m"
FgBlack = "\x1b[30m"
FgRed = "\x1b[31m"
FgGreen = "\x1b[32m"
FgYellow = "\x1b[33m"
FgBlue = "\x1b[34m"
FgMagenta = "\x1b[35m"
FgCyan = "\x1b[36m"
FgWhite = "\x1b[37m"
FgGray = "\x1b[90m"
BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"
BgGray = "\x1b[100m"
Вы можете просто использовать эти коды в своем скрипте Node.js, чтобы раскрасить текст. Например:
console.log(FgRed + "Это красный текст" + Reset);
Таким образом, вы сможете выводить цветной текст в консоль без необходимости добавлять какие-либо дополнительные библиотеки.
Как предотвратить установку "devDependencies" модулей NPM для Node.js (package.json)?
Ошибка "npm WARN package.json: Нет поля repository"
Как исправить ошибку "ReferenceError: primordials is not defined" в Node.js
Как протестировать один файл с помощью Jest?
nvm постоянно "забывает" Node.js в новой сессии терминала