如何更改node.js的控制台字体颜色?

How to change node.js's console font color?

由于眼睛的问题,我不得不将控制台的背景色改为白色,但是字体是灰色的,它会使消息不可读。我怎样才能改变它?


下面是运行node.js应用程序时要命令的文本的颜色引用:

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

注:%s是注入字符串(第二个参数)的位置。\x1b[0m重置终端颜色,使其在该点之后不再是选定的颜色。

颜色参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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是一个转义序列,将被您的终端截获,并指示它切换到红色。实际上,\x1b是不可打印控制字符escape的代码。仅处理颜色和样式的转义序列也称为ANSI转义代码,并且是标准化的,因此它们(应该)可以在任何平台上工作。

维基百科很好地比较了不同终端显示颜色的方式。https://en.wikipedia.org/wiki/ansi_escape_code颜色


node.js中有多个可用于格式化控制台文本的包。最受欢迎的是:

  • chalk
  • 江户十一〔一〕号
  • 埃多克斯1〔2〕

用途:

粉笔:

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

CLI颜色:

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

颜色:

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

许多人注意到他们不赞成colors修改字符串原型。如果您希望让原型单独使用,请使用以下代码:

1
2
const colors = require('colors/safe');
console.log(colors.red('Text in red'));


如果您想直接更改颜色而不使用模块,请尝试

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

首先'x1b[36m'将颜色更改为"36",然后返回终端颜色"0"。

这是一个ANSI颜色代码列表


要对输出进行着色,可以使用以下示例:https://help.ubuntu.com/community/customizingbashsprompt

也是点头的要点

例如,如果希望部分文本为红色,只需使用以下命令执行console.log:

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

基于此,我为node.js创建了"colog"扩展。您可以使用以下方法安装:

1
npm install colog

回购和NPM:网址:https://github.com/dariuszp/colog


根据此文档,您可以根据输出的数据类型更改颜色:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 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()。黑色上的深洋红很难辨认。我们换成浅品红色。

1
2
3
4
5
// 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的脚本,如下所示:

1
2
3
4
5
6
7
// 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命令提示。

(多亏了这个答案中关于回复想法的罗根夫神话。)


这是控制台中可用颜色(背景、前景)的列表,具有可用操作(重置、反转等)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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"
 }
};

使用方法如下:

1
2
 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

您还可以安装:

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

它将为您提供一个更接近客户端控制台的输出:

氧化镁


Sindre Sorhus的这座图书馆是目前最好的:

粉笔

  • 高性能
  • 不扩展String.prototype
  • 表达型API
  • 嵌套样式的能力
  • 干净集中
  • 自动检测颜色支持
  • 积极维护
  • 5500+模块使用


Color codes are as mentioned

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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中这样做:

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

颜色和效果的顺序似乎没有那么重要,但请始终记住在结束时重置颜色和效果。


对于不干扰字符串对象内置方法的颜色的流行替代方法,我建议签出cli color。

包括颜色和可链接样式,如粗体、斜体和下划线。

有关此类别中各种模块的比较,请参阅此处。


没有图书馆,没有复杂的事情,只是简单的:

1
2
3
4
5
console.log(red('Error!'));

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


我为没有依赖项的NPM脚本编写了一个方便的一行程序:

1
2
3
4
5
6
7
8
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')}`)


现在有两种方法可以查看更改node.js控制台的颜色。

一种是通过通用库来修饰带有颜色标签的文本字符串,然后通过标准的console.log输出。

今天的顶级图书馆:

  • 粉笔
  • 颜色
  • CLI颜色

另一种方法是修补现有的控制台方法。一个这样的库-Manakin允许您为所有控制台方法(logwarnerrorinfo自动设置标准颜色。

与通用颜色库的一个显著区别是,它可以全局或本地设置颜色,同时为每个node.js控制台方法保持一致的语法和输出格式,然后使用这些方法而不必指定颜色,因为它们都是自动设置的。

I had to change the console background color to white because of eye problems, but the font is gray colored and it makes the messages unreadable. How can I change it?

具体来说,以下是最简单的解决方案:

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

它将为应用程序中的每个console.log调用设置黑色。查看更多颜色代码。

Manakin使用的默认颜色:

enter image description here


我重载了控制台方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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");

输出为。氧化镁


我不想对这个有任何依赖性,只有这些对我在OSX上有效。这里答案的所有其他样本都给了我Octal literal错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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-colorive-text-in-terminal-when-run-node-js-script


遇到这个问题,想在stdout上使用一些颜色,而不需要任何依赖。这结合了其他一些很好的答案。

这就是我要的。(需要节点v4或更高版本)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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()

只需要文件,然后按如下方式使用:

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

此处提供预定义的颜色代码


油漆控制台

简单的可着色原木。支持检查对象和单行更新这个包裹只是重新粉刷控制台。

安装

1
npm install paint-console

使用

1
2
3
4
5
6
require('paint-console');

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

演示


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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);

你也可以使用色彩。

用途:

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

为了让生活更容易,你也可以用它来做一个功能。

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

现在你可以喜欢了

1
say(`[[yellow|Time spent: [[green|${time}]]ms.]]`);


我创建了自己的模块,StyleMe。我做了它,这样我可以做很多与小打字。例子:

1
2
3
4
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.

它也可以嵌套:

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

或者,如果您不想扩展字符串原型,您可以选择其他3个选项中的任意一个:

1
2
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
2
var coolors = require('coolors');
console.log(coolors('My cool console log', 'red'));

或配置:

1
2
3
4
5
6
7
8
9
var coolors = require('coolors');
console.log(coolors('My cool console log', {
   text: 'yellow',
   background: 'red',
   bold: true,
   underline: true,
   inverse: true,
   strikethrough: true
}));

似乎很有趣的是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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'));

查看冷却模块


节点着色

提供打印彩色文本以及设置粗体、闪烁等文本格式的功能。


2017:

简单的方法,在消息中添加时间颜色,您不需要更改代码,使用keep your console.log('msg')或console.err('err or')

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)
    );
  };
});

氧化镁


在Ubuntu中,您可以简单地使用颜色代码:

1
2
3
4
var sys = require('sys');
process.stdout.write("x1B[31m" + your_message_in_red +"\x1B[0m

");


这是Windows10(可能是7)的一种方法,它改变了Cmd、NPM终端本身的颜色方案(主题),而不仅仅是特定应用程序的控制台输出。

我找到了正在工作的Windows插件颜色工具,它大概是在Windows保护伞下开发的。链接中提供了说明。

我在系统环境路径变量中添加了colortool目录,现在只要启动终端(nodejs command prompt,cmd),就可以使用它。


记录器/index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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中

1
require('./logger')();

然后像这样使用:

1
console.logBgGreen(" grüner Hintergrund")


我很喜欢@daniel的答案,但是console.log color函数的工作方式与普通console.log不同。我做了一些更改,现在新函数的所有参数都将传递到console.log(以及颜色代码)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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);
        }
    });
}


如果您使用的是windows cmd,则转到终端属性/颜色(cmd左上角),然后重新定义冒犯性颜色的RGB值。在我的例子中,我认为这是第五个颜色的正方形,从左边改为(22222222)。当您重新定义特定的"系统"颜色时,当前选定的单选按钮是否显示屏幕文本或屏幕背景并不重要。一旦更改了颜色,请不要忘记在单击"确定"之前为背景或文本选择回首选颜色。

更改之后,所有来自节点的红色消息(在我的例子中是余烬)都清晰可见。


1
2
3
var to_rgb = function (_text, _r, _g, _b) {
    return"\x1b[38;2;" + _r +";" + _g +";" + _b +"m" + _text +"\x1b[0m";
};

此代码有助于设置前景颜色:x1b[38;2;r;g;bm

这可能在某个地方不起作用