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

571

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

MaiaVictor
источник
4
Там же, где вы уже использовали для изменения цвета фона, вы можете изменить и другие цвета.
Дан Д.
@hippietrail, ребята, вы нашли лучшее решение или можете принять один из ответов на этот вопрос?
Нельсоник
Как вы делаете это в чистом Node.js? Без цветов или любой другой упаковки.
Коста
1
У меня та же проблема. Я подозреваю, что @Viclib использует окна (как и я), поэтому инструкции по изменению цвета терминала являются чужой концепцией. Командная строка Windows позволяет изменить 2 цвета переднего плана и 2 цвета фона. Узел использует другие цвета, которые командная строка Windows не может определить.
Грег Вудс
2
Позже я обнаружил, что моя ментальная модель того, как работают цвета командной строки Windows, была полностью неверной. Я неправильно предположил (из-за ужасного интерфейса), что вы можете изменить только передний план, цвета фона. Это не верно. Все 16 цветов могут использоваться консольным приложением, и крайне важно выбрать разумные цвета для всех 16, и ВСЕГДА использовать цветную плитку 1 в качестве фона (и плитку 9 для «всплывающего фона»). Это было таким откровением для меня, я написал сообщение в блоге (действительно редкое событие). gregwoods.co.uk/2015/04/…
Грег Вудс

Ответы:

1151

Ниже вы можете найти цветовую ссылку текста для команды при запуске приложения node.js:

console.log('\x1b[36m%s\x1b[0m', 'I am cyan');  //cyan
console.log('\x1b[33m%s\x1b[0m', stringToMakeYellow);  //yellow

Обратите внимание %s, где в строке (второй аргумент) вводится. \x1b[0mсбрасывает цвет терминала, чтобы после этой точки он больше не был выбранным цветом.

Справочник цветов

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"

BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"

РЕДАКТИРОВАТЬ:

Например, \x1b[31mэто escape-последовательность, которая будет перехвачена вашим терминалом и даст ему команду переключиться на красный цвет. Фактически, \x1bэто код для непечатного управляющего символа escape . Escape-последовательности, имеющие дело только с цветами и стилями, также называются escape-кодом ANSI и стандартизированы, поэтому они (должны) работать на любой платформе.

В Википедии есть хорошее сравнение того, как разные терминалы отображают цвета https://en.wikipedia.org/wiki/ANSI_escape_code#Colors

Бад Дамьянов
источник
42
Я принял этот вопрос, потому что он самый ленивый, который работает, имеет много цветов и никаких зависимостей. Если вы хотите более простое решение с зависимостями, проверьте ответ @ nelsonic, который предлагает очень простые библиотеки.
MaiaVictor
7
Где вы нашли эту ссылку? Что означает каждый символ в значении цвета?
giorgos.nl
10
@ giorgos29cm → см. здесь . Кстати, добавить 1;для ярких цветов, то есть "\ x1b [1; 34m" == светло-голубой ...
Фрэнк
2
Как не показывать эти символы при печати в файл, а не на консоли?
Sky
1
Любопытно, что на Windows 10 PowerShell желтый становится белым? Желтый можно заставить работать; Мел делает это. Тем не менее, этот ответ спас меня от добавления мела в качестве зависимости для нескольких жалких журналов, спасибо!
Webelo
318

Для форматирования консольного текста в Node.js. доступно несколько пакетов. Наиболее популярными являются:

Применение:


CHALK:

const chalk = require('chalk');
console.log(chalk.red('Text in red'));

CLI-COLOR:

const clc = require('cli-color');
console.log(clc.red('Text in red'));

ЦВЕТА:

const colors = require('colors');
console.log('Text in red'.red);

Многие люди отмечают свое неодобрение по colorsповоду изменения прототипа String . Если вы предпочитаете, чтобы ваши прототипы оставались в покое, используйте вместо этого следующий код:

const colors = require('colors/safe');
console.log(colors.red('Text in red'));
nelsonic
источник
1
Он даже имеет простую облегченную поддержку стилей!
hippietrail
2
@devundef согласен с вами по поводу добавления методов к объекту String. Стоит упомянуть об этом автору модуля на GitHub. И / или предлагая альтернативный модуль / метод с аналогичным уровнем простоты.
Нельсоник
3
Хотя я согласен, что ответ MattJohnson (переопределяя цвета по умолчанию для метода util.inpect - см. Ниже) лучше, чем использование модуля Colors, модуль Colors требует нулевой настройки и соответствует потребностям подавляющего большинства пользователей, которые просто меняют цвет консоли .log вывод. Конечно, «возиться со встроенными модулями» - это плохо (согласитесь на 100%), но никакой развернутый код не должен содержать операторов console.log, поэтому давайте прагматичны в этом. @devundef Добавлены ли дополнительные методы String к прототипу путаницы с вашими юнит-тестами?
Нельсоник
8
У цветов есть это теперь: var colors = require('colors/safe');и затем используйтеcolors.red('left string all alone')
Laoujin
1
Хорошо заметили @Laoujin - в следующий раз не стесняйтесь предлагать редактирование. Я исправил пример кода для цветов в ответе.
Нельсоник
155

Если вы хотите изменить цвета непосредственно, без модуля, попробуйте

console.log('\x1b[36m', 'sometext' ,'\x1b[0m');

Сначала \x1b[36mизмените цвета на, 36а затем снова на цвет терминала 0.

Вот список цветовых кодов ANSI

Генри Ценг
источник
15
Спасибо за упоминание, как сбросить цвет обратно.
Василий Боровяк
25
Вот коды терминала ANSI, telepathy.freedesktop.org/doc/telepathy-glib/…
Ешьте в Joes
1
Как насчет изменения стиля шрифта, например, жирного красного, курсивного зеленого?
uzay95
1
Работал отлично, не мешал восьмеричным кодам escape в строгом режиме.
Флорри
70

Чтобы раскрасить вывод, вы можете использовать примеры оттуда:
https://help.ubuntu.com/community/CustomizingBashPrompt

Также Gist для nodeJs

Например, если вы хотите, чтобы часть текста была красного цвета, просто сделайте console.log с:

"\033[31m this will be red \033[91m and this will be normal"

На основании этого я создал расширение "colog" для Node.js. Вы можете установить его используя:

npm install colog

Репо и npm: https://github.com/dariuszp/colog

Dariuszp
источник
1
Я считаю, что OP не хочет печатать определенный текст определенного цвета, но все выходные данные терминала по умолчанию имеют другой цвет, возможно, даже черный, учитывая белый фон.
cwoebker
Затем он должен изменить настройки своего терминала. Я уверен, что это возможно в Linux. Понятия не имею о Windows.
Дариусп
14
\033[31mработает но \033[91mне работает Для Ubuntu Terminal это должно быть \033[0m.
Redsandro
4
И восьмеричные побеги, кажется, не работают:error: octal escape sequences "\033[31mServer ready @ #{app.get('port')}\033[91m" are not allowed
jcollum
4
\033[0mследует использовать, чтобы вернуть текст в нормальное состояние, а не\033[91m
mollerhoj
31

Это список доступных цветов (фон, передний план) в консоли с доступными действиями (сброс, реверс, ...).

const colors = {
 Reset: "\x1b[0m",
 Bright: "\x1b[1m",
 Dim: "\x1b[2m",
 Underscore: "\x1b[4m",
 Blink: "\x1b[5m",
 Reverse: "\x1b[7m",
 Hidden: "\x1b[8m",
 fg: {
  Black: "\x1b[30m",
  Red: "\x1b[31m",
  Green: "\x1b[32m",
  Yellow: "\x1b[33m",
  Blue: "\x1b[34m",
  Magenta: "\x1b[35m",
  Cyan: "\x1b[36m",
  White: "\x1b[37m",
  Crimson: "\x1b[38m" //القرمزي
 },
 bg: {
  Black: "\x1b[40m",
  Red: "\x1b[41m",
  Green: "\x1b[42m",
  Yellow: "\x1b[43m",
  Blue: "\x1b[44m",
  Magenta: "\x1b[45m",
  Cyan: "\x1b[46m",
  White: "\x1b[47m",
  Crimson: "\x1b[48m"
 }
};

Используйте его следующим образом:

 console.log(colors.bg.Blue, colors.fg.White , "I am white message with blue background", colors.Reset) ; 
 //don't forget "colors.Reset" to stop this color and return back to the default color

Вы также можете установить:

npm install console-info console-warn console-error --save-dev

Это даст вам вывод ближе к консоли на стороне клиента:

введите описание изображения здесь

Абденнур ТУМИ
источник
1
Я использую то же самое и работает нормально, но по какой-то причине Дим ничего не делает? Я хочу, чтобы эффект серого цвета, так что думал, что будет использовать белый цвет с затемнением, приведет к серому цвету, но только белый цвет печатает без затемнения. Есть идеи?
Ангад
28

В соответствии с этой документацией вы можете изменить цвета в зависимости от типа данных на выходе:

// you'll need the util module
var util = require('util');

// let's look at the defaults: 
util.inspect.styles

{ special: 'cyan',
  number: 'yellow',
  boolean: 'yellow',
  undefined: 'grey',
  null: 'bold',
  string: 'green',
  date: 'magenta',
  regexp: 'red' }

// what are the predefined colors?
util.inspect.colors

{ bold: [ 1, 22 ],
  italic: [ 3, 23 ],
  underline: [ 4, 24 ],
  inverse: [ 7, 27 ],
  white: [ 37, 39 ],
  grey: [ 90, 39 ],
  black: [ 30, 39 ],
  blue: [ 34, 39 ],
  cyan: [ 36, 39 ],
  green: [ 32, 39 ],
  magenta: [ 35, 39 ],
  red: [ 31, 39 ],
  yellow: [ 33, 39 ] }

Похоже, это экранирующие коды ANSI SGR, где первое число - это код, который должен быть выдан до вывода, а второе число - это код, который должен быть выдан после. Итак, если мы посмотрим на таблицу кодов ANSI SGR в Википедии , вы увидите, что большинство из них начинаются с номера 30-37, чтобы установить цвет переднего плана, и заканчиваются 39, чтобы сбросить цвет переднего плана по умолчанию.

Одна вещь, которая мне не нравится, это то, насколько они темны. Особенно даты. Идите и попробуйте new Date()в консоли. Темно-пурпурный на черном действительно трудно читать. Давайте вместо этого изменим его на светло-пурпурный.

// first define a new color
util.inspect.colors.lightmagenta = [95,39];

// now assign it to the output for date types
util.inspect.styles.date = 'lightmagenta';

Теперь, когда вы пытаетесь new Date() , вывод гораздо более читабельным.

Если вы хотите установить цвета автоматически при запуске узла, создайте скрипт, который запускает repl, например:

// set your colors however desired
var util = require('util');
util.inspect.colors.lightmagenta = [95,39];
util.inspect.styles.date = 'lightmagenta';

// start the repl    
require('repl').start({});

Сохраните этот файл (например, init.js), затем запуститеnode.exe init.js . Он установит цвета и запустит командную строку node.js.

(Спасибо loganfsmyth в этом ответе за идею repl.)

Мэтт Джонсон-Пинт
источник
19

Эта библиотека Синдре Сорхуса является лучшей на данный момент:

мелки

  • Высокоэффективный
  • Не распространяется String.prototype
  • Выразительный API
  • Возможность вложения стилей
  • Чистый и сфокусированный
  • Автоопределение поддержки цвета
  • Активно поддерживается
  • Используется 5500+ модулями
Каллум
источник
2
да, но это другая зависимость
wayofthefuture
18

Цветовые коды как указано

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"

BgBlack: "\x1b[40m"
BgRed: "\x1b[41m"
BgGreen: "\x1b[42m"
BgYellow: "\x1b[43m"
BgBlue: "\x1b[44m"
BgMagenta: "\x1b[45m"
BgCyan: "\x1b[46m"
BgWhite: "\x1b[47m"

Например, если вы хотите, чтобы текст был тусклым, красным с синим фоном, вы можете сделать это в Javascript следующим образом:

console.log("\x1b[2m", "\x1b[31m", "\x1b[44m", "Sample Text", "\x1b[0m");

Порядок цветов и эффектов, кажется, не так важен, но всегда не забывайте сбрасывать цвета и эффекты в конце.

Shnd
источник
@ Сергей моргание также не работает для меня, кажется, что это не доступно в узле
Sv443
@ Sv443 Но на скриншоте работает :) И вопрос был про Node. Я думал, что это не работает только в консоли Windows. Какую ОС вы используете?
Сергей
2
@ Сергей Я использую Windows и пробовал в CMD и Powershell, и оба не работают
Sv443
@Sergey Мои скриншоты из терминального приложения MacOS. Я считаю, что это то, что должно поддерживать ваше приложение оболочки. Если вы используете Windows, я бы посоветовал установить Cygwin и попробовать это на bash. Мне тоже интересно узнать об этом.
Шнд
@Shnd Я не уверен, что это то же самое, но я попробовал это на git-bash, и он тоже не работал.
Сергей
14

Удобный однострочник, который я написал для сценариев 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 обозначает красный, зеленый, синий, белый, голубой, пурпурный, желтый и черный (k)

chriskelly
источник
Кажется полезным, но, пожалуйста, вы можете объяснить это дальше? Режим детектирования включен: ах, хорошо, rgbwc ... обозначает красный, зеленый, синий, белый, голубой, пурпурный, желтый и k?
538ROMEO
11

Emoji

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

Но вы можете использовать смайлики вместо этого! Например, вы можете использовать Вы можете использовать ⚠️для предупреждений и сообщений 🛑об ошибках.

Или просто используйте эти записные книжки в качестве цвета:

📕: error message
📙: warning message
📗: ok status message
📘: action message
📓: canceled status message
📔: Or anything you like and want to recognize immediately by color

Бонус:

Этот метод также помогает вам быстро сканировать и находить журналы прямо в исходном коде .

Но шрифт Emoji по умолчанию в Linux не цветной, и вы можете сначала сделать его цветным.

Мойтаба Хоссейни
источник
10

Для популярной альтернативы цветам , которая не мешает встроенным методам объекта String, я рекомендую проверить cli-color .

Включает в себя как цвета, так и стили с цепочкой, такие как жирный, курсив и подчеркивание.

Для сравнения различных модулей в этой категории, смотрите здесь .

user456584
источник
10

Никаких библиотек, никаких сложностей, просто:

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

function red(s) {
    return '\033[31m' + s;
}
wayofthefuture
источник
1
Это непросто, когда вы обнаружите, что он не работает с объектами так, как консоль обрабатывает их, и что он не учитывает типы потоков консоли или поддержку TTY, что создает дополнительные проблемы. Это просто взлом, который принесет много проблем в будущем.
vitaly-t
Это то, для чего нужен JSON.stringify
wayofthefuture
6

Есть два способа посмотреть на изменение цвета для консоли Node.js.

Один из них - библиотеки общего назначения, которые могут украшать текстовую строку цветными тегами, которые затем выводятся стандартным способом. console.log .

Лучшие библиотеки для этого сегодня:

И другой способ - исправление существующих консольных методов. Одна из таких библиотек - Manakin позволяет автоматически установить стандартные цвета для всех методов консоли ( log, warn, errorи info).

Одно существенное отличие от универсальных библиотек цветов - он может устанавливать цвета глобально или локально, сохраняя при этом согласованный синтаксис и формат вывода для каждого консольного метода Node.js, который затем используется без указания цветов, поскольку все они устанавливаются автоматически. ,

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

Специально для вашей проблемы, вот самое простое решение:

var con = require('manakin').global;
con.log.color = 30; // Use black color for console.log

Он установит черный цвет для каждого console.logвызова в вашем приложении. Смотрите больше цветовых кодов .

Цвета по умолчанию, используемые manakin :

введите описание изображения здесь

виталий-т
источник
6

Я перегружал консольные методы.

var colors={
Reset: "\x1b[0m",
Red: "\x1b[31m",
Green: "\x1b[32m",
Yellow: "\x1b[33m"
};

var infoLog = console.info;
var logLog = console.log;
var errorLog = console.error;
var warnLog = console.warn;

console.info= function(args)
{
    var copyArgs = Array.prototype.slice.call(arguments);
    copyArgs.unshift(colors.Green);
    copyArgs.push(colors.Reset);
    infoLog.apply(null,copyArgs);
};

console.warn= function(args)
{
    var copyArgs = Array.prototype.slice.call(arguments);
    copyArgs.unshift(colors.Yellow);
    copyArgs.push(colors.Reset);
    warnLog.apply(null,copyArgs);
};
console.error= function(args)
{
    var copyArgs = Array.prototype.slice.call(arguments);
    copyArgs.unshift(colors.Red);
    copyArgs.push(colors.Reset);
    errorLog.apply(null,copyArgs);
};

// examples
console.info("Numeros",1,2,3);
console.warn("pares",2,4,6);
console.error("reiniciandooo");

Выход есть.

введите описание изображения здесь

Рональд
источник
Это не работает с синтаксисом форматирования. Пример: console.info('Hello %s', 'World!')должен отображаться Hello World!, а не Hello %s World!.
vitaly-t
@ vitaly-t попробуйте это : это должно работать.
Сергей
5

Наткнулся на этот вопрос и хотел использовать некоторые цвета на stdout без каких-либо зависимостей. Это объединяет некоторые другие замечательные ответы здесь.

Вот что у меня есть. (Требуется узел v4 или выше)

// colors.js
const util = require('util')

function colorize (color, text) {
  const codes = util.inspect.colors[color]
  return `\x1b[${codes[0]}m${text}\x1b[${codes[1]}m`
}

function colors () {
  let returnValue = {}
  Object.keys(util.inspect.colors).forEach((color) => {
    returnValue[color] = (text) => colorize(color, text)
  })
  return returnValue
}

module.exports = colors()

Просто потребуйте файл, а затем используйте его так:

const colors = require('./colors')
console.log(colors.green("I'm green!"))

Предопределенные цветовые коды доступны здесь

Джозеф Пост
источник
1
например, не будет работать правильно при перенаправлении в файл журнала.
Виталий-т
4

Краска-консоль

Простой красочный журнал. Поддержка проверки объектов и однострочного обновления. Этот пакет просто перекрашивает консоль.

устанавливать

npm install paint-console

Применение

require('paint-console');

console.info('console.info();');
console.warn('console.warn();');
console.error('console.error();');
console.log('console.log();');

демонстрация

borodinmk
источник
4

Я не хочу никакой зависимости для этого, и только они работали для меня на OS X. Все другие примеры из ответов здесь дали мне Octal literalошибки.

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"

BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"

источник: https://coderwall.com/p/yphywg/printing-colorful-text-in-terminal-when-run-node-js-script

Лукас Лиесис
источник
4

Я нашел этот ответ выше ( 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",

  BgBlack: "\x1b[40m",
  BgRed: "\x1b[41m",
  BgGreen: "\x1b[42m",
  BgYellow: "\x1b[43m",
  BgBlue: "\x1b[44m",
  BgMagenta: "\x1b[45m",
  BgCyan: "\x1b[46m",
  BgWhite: "\x1b[47m"
}

function colorString(color, string) {
  return `${color}${string}${Color.Reset}`;
}

function colorStringLog(color, string) {
  console.log(colorString(color, string));
}

Используйте это так:

colorStringLog(Color.FgYellow, "Some Yellow text to console log");

console.log([
  colorString(Color.FgRed, "red"),
  colorString(Color.FgGreen, "green"),
  colorString(Color.FgBlue, "blue"),
].join(", "));
Сеф Рид
источник
4

ЗК / index.js

const colors = {
    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",

    BgBlack : "\x1b[40m",
    BgRed : "\x1b[41m",
    BgGreen : "\x1b[42m",
    BgYellow : "\x1b[43m",
    BgBlue : "\x1b[44m",
    BgMagenta : "\x1b[45m",
    BgCyan : "\x1b[46m",
    BgWhite : "\x1b[47m",
};

module.exports = () => {
    Object.keys(colors).forEach(key => {
        console['log' + key] = (strg) => {
            if(typeof strg === 'object') strg = JSON.stringify(strg, null, 4);
            return console.log(colors[key]+strg+'\x1b[0m');
        }
    });
}

app.js

require('./logger')();

Тогда используйте это как:

console.logBgGreen(" grüner Hintergrund ")
Даниил
источник
4

Это в некоторой степени зависит от того, на какой платформе вы находитесь. Наиболее распространенный способ сделать это - распечатать escape-последовательности ANSI. Для простого примера, вот код Python из скриптов сборки Blender:

// This is a object for use ANSI escape to color the text in the terminal
const bColors = {
    HEADER    : '\033[95m',
    OKBLUE    : '\033[94m',
    OKGREEN   : '\033[92m',
    WARNING   : '\033[93m',
    FAIL      : '\033[91m',
    ENDC      : '\033[0m', 
    BOLD      : '\033[1m',   
    UNDERLINE : '\033[4m'
}

Чтобы использовать такой код, вы можете сделать что-то вроде

console.log(`${bColors.WARNING} My name is sami ${bColors.ENDC}`)
Сами
источник
Я получаю «Восьмеричные escape-последовательности не разрешены в строгом режиме».
Lucaswxp
3
var colorSet = {
    Reset: "\x1b[0m",
    Red: "\x1b[31m",
    Green: "\x1b[32m",
    Yellow: "\x1b[33m",
    Blue: "\x1b[34m",
    Magenta: "\x1b[35m"
};

var funcNames = ["info", "log", "warn", "error"];
var colors = [colorSet.Green, colorSet.Blue, colorSet.Yellow, colorSet.Red];

for (var i = 0; i < funcNames.length; i++) {
    let funcName = funcNames[i];
    let color = colors[i];
    let oldFunc = console[funcName];
    console[funcName] = function () {
        var args = Array.prototype.slice.call(arguments);
        if (args.length) {
            args = [color + args[0]].concat(args.slice(1), colorSet.Reset);
        }
        oldFunc.apply(null, args);
    };
}

// Test:
console.info("Info is green.");
console.log("Log is blue.");
console.warn("Warn is orange.");
console.error("Error is red.");
console.info("--------------------");
console.info("Formatting works as well. The number = %d", 123);
Сергей
источник
3

Вы также можете использовать колеров .

Применение:

var cw = require('colorworks').create();
console.info(cw.compile('[[red|Red message with a [[yellow|yellow]] word.]]'));

Чтобы сделать жизнь проще, вы также можете сделать функцию с ним.

function say(msg) {
  console.info(cw.compile(msg));
}

Теперь вы можете сделать:

say(`[[yellow|Time spent: [[green|${time}]]ms.]]`);
SCLeo
источник
2

Coolors

Это очень хорошо для использования или расширения. Вы можете использовать просто:

var coolors = require('coolors');
console.log(coolors('My cool console log', 'red'));

Или с помощью конфигурации:

var coolors = require('coolors');
console.log(coolors('My cool console log', {
   text: 'yellow',
   background: 'red',
   bold: true,
   underline: true,
   inverse: true,
   strikethrough: true
}));

И кажется действительно забавным расширить:

var coolors = require('coolors');
function rainbowLog(msg){
    var colorsText = coolors.availableStyles().text;
    var rainbowColors = colorsText.splice(3);
    var lengthRainbowColors = rainbowColors.length;
    var msgInLetters = msg.split('');
    var rainbowEndText = '';
    var i = 0;
    msgInLetters.forEach(function(letter){
        if(letter != ' '){
            if(i === lengthRainbowColors) i = 0;
            rainbowEndText += coolors(letter, rainbowColors[i]);
            i++;
        }else{
            rainbowEndText += ' ';
        }
    });
    return rainbowEndText;
}
coolors.addPlugin('rainbow', rainbowLog);
console.log(coolorsExtended('This its a creative example extending core with a cool rainbown style', 'rainbown'));

Просмотреть модуль Coolors

user1710825
источник
это не будет работать в Node.js правильно, например, при перенаправлении в файл журнала.
Виталий-т
2

Я создал свой собственный модуль, StyleMe . Я сделал это, чтобы я мог многое сделать с небольшим набором текста. Пример:

var StyleMe = require('styleme');
StyleMe.extend() // extend the string prototype

console.log("gre{Hello} blu{world}!".styleMe()) // Logs hello world! with 'hello' being green, and 'world' being blue with '!' being normal.

Также может быть вложенным:

console.log("This is normal red{this is red blu{this is blue} back to red}".styleMe())

Или, если вы не хотите расширять прототип строки, вы можете использовать любой из 3 других вариантов:

console.log(styleme.red("a string"))
console.log("Hello, this is yellow text".yellow().end())
console.log(styleme.style("some text","red,bbl"))
Эндрю
источник
1

В Ubuntu вы можете просто использовать цветовые коды:

var sys = require('sys');
process.stdout.write("x1B[31m" + your_message_in_red + "\x1B[0m\r\n");
Кенджи Минамори
источник
Почему неиспользованный require?
Jhpratt GOFUNDME RELICENSING
Это было пару лет назад. Это было необходимо для записи на стандартный вывод, возможно, теперь он уже импортирован по умолчанию.
Кенджи Минамори
Ах хорошо. Мне было просто любопытно, потому что это не так, как sysкогда-либо использовался Это на самом деле не нужно в наше время, хотя!
jhpratt GOFUNDME RELICENSING
1

Узел-colorify

Предоставляет функции для печати текстов в цвете, а также для форматирования текста, например, жирным шрифтом, мерцанием и т. Д.

Рагу
источник
3
Хотя указанная вами ссылка может ответить на вопрос. Лучше всего указывать основные части вашего решения непосредственно в своем ответе, если срок действия страницы по ссылке истекает в будущем.
Kmeixner
1

Мне очень понравился ответ @ Daniel, но функции console.log {color} не работали так же, как обычный console.log. Я сделал несколько изменений, и теперь все параметры новых функций будут переданы в console.log (а также цветовые коды).

const _colors = {
    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",

    BgBlack : "\x1b[40m",
    BgRed : "\x1b[41m",
    BgGreen : "\x1b[42m",
    BgYellow : "\x1b[43m",
    BgBlue : "\x1b[44m",
    BgMagenta : "\x1b[45m",
    BgCyan : "\x1b[46m",
    BgWhite : "\x1b[47m",
};

const enableColorLogging = function(){
    Object.keys(_colors).forEach(key => {
        console['log' + key] = function(){
            return console.log(_colors[key], ...arguments, _colors.Reset);
        }
    });
}
Дж. Фортман
источник
1

2017:

Простой способ, добавляя временной цвет к сообщению, вам не нужно менять код, используйте keep your console.log ('msg') или console.err ('error')

var clc = require("cli-color");
var mapping = {
  log: clc.blue,
  warn: clc.yellow,
  error: clc.red
};

["log", "warn", "error"].forEach(function(method) {
  var oldMethod = console[method].bind(console);
  console[method] = function() {
    oldMethod.apply(
      console,
      [mapping[method](new Date().toISOString())]
      .concat(arguments)
    );
  };
});

введите описание изображения здесь

stackdave
источник
0

Если вы используете Windows CMD, перейдите к терминалу Properties / Colors (CMD вверху слева) и затем переопределите значение RGB оскорбительного цвета. В моем случае я считаю, что это пятый цветной квадрат слева, который я изменил (222,222,222). Неважно, отображает ли выбранная в данный момент радиокнопка «Текст экрана» или «Фон экрана», поскольку вы просто переопределяете этот определенный «системный» цвет. После того, как вы изменили цвет, не забудьте выбрать предпочтительный цвет фона или текста, прежде чем нажимать ОК.

После изменения все эти красноватые сообщения от Node (Ember в моем случае) хорошо видны.

mp31415
источник
0

Это подход для Windows 10 (может быть, для 7), и он изменяет цветовую схему (тему) для cmd, самого терминала npm, а не только вывод консоли для конкретного приложения.

Я нашел работающий плагин Windows - Color Tool , который предположительно разработан под зонтиком Windows. Описание доступно по ссылке .

Я добавил каталог colortool в переменную пути системного окружения, и теперь он доступен при каждом запуске терминала (командная строка NodeJs, cmd).

Роман
источник