10

Как изменить цвет шрифта консоли в Node.js?

13

Я столкнулся с проблемой: мне пришлось изменить цвет фона консоли на белый из-за проблем со зрением, но текст шрифта стал серым, из-за чего сообщения стали нечитаемыми. Как я могу изменить цвет шрифта?

5 ответ(ов)

0

Этот ответ, который я нашел выше (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(", "));

Таким образом, у вас есть возможность легко раскрашивать строки при выводе в консоль, что значительно расширяет применимость в реальных проектах.

0

Если вы хотите сделать это ПРОШЛОЕ простым, без использования сторонних модулей, изучения новых 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');.

0

Вы можете использовать следующий однострочник для скриптов 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), соответственно. Функции возвращают строки с соответствующими цветами для вывода в терминале.

0

Если вы хотите вывести текст "Error!" красным цветом в консоли без использования библиотек и с минимальными усложнениями, вы можете сделать это, используя коды ANSI. Вот пример:

console.log(red('Error!'));

function red(s) {
    return '\x1b[31m' + s + '\x1b[0m';
}

Здесь \x1b[31m устанавливает красный цвет для текста, а \x1b[0m сбрасывает цвет обратно к умолчаниям после вывода.

0

Если вы хотите использовать цветной текст в терминале на 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);

Таким образом, вы сможете выводить цветной текст в консоль без необходимости добавлять какие-либо дополнительные библиотеки.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь