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

由于眼睛问题,我不得不将控制台背景颜色更改为白色,但字体是灰色的,使消息无法读取。我该如何更改它?

542113 次浏览

有多个包可用于格式化控制台文本在Node.js.最流行的是:

用法:

粉笔:

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'));

为您的输出着色您可以使用那里的示例:
https://help.ubuntu.com/community/CustomizingBashPrompt

也是nodejs的要点

例如,如果您希望文本的一部分是红色的,只需console.log:

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

基于此,我为Node.js.创建了“colog”扩展,您可以使用以下方式安装它:

npm install colog

Repo和npm:https://github.com/dariuszp/colog

根据这个留档,您可以根据输出的数据类型更改颜色:

// you'll need the util modulevar 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 colorutil.inspect.colors.lightmagenta = [95,39];
// now assign it to the output for date typesutil.inspect.styles.date = 'lightmagenta';

现在,当您尝试new Date()时,输出更具可读性。

如果您想在启动节点时自动设置颜色,请创建一个启动repl的脚本,如下所示:

// set your colors however desiredvar util = require('util');util.inspect.colors.lightmagenta = [95,39];util.inspect.styles.date = 'lightmagenta';
// start the replrequire('repl').start({});

保存此文件(例如,init.js),然后运行node.exe init.js。它将设置颜色并启动node.js命令提示符。

(感谢这个答案中的loganfsmyth的repl想法。)

对于不与String对象的内置方法混淆的颜色的流行替代方案,我建议检查颜色

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

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

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

粉笔

  • 高性能
  • 不扩展String.prototype
  • 表达式API
  • 嵌套样式的能力
  • 干净和专注
  • 自动检测颜色支持
  • 积极维护
  • 已被5500多个模块使用

冷却器

它非常适合使用或扩展。您可以简单地使用:

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

或者使用config:

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模块

如果你想改变颜色直接自己没有一个模块尝试

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

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

这是ANSI颜色代码的列表

如果您使用的是Windows CMD,请转到终端属性/颜色(CMD左上角),然后重新定义冒犯性颜色的RGB值。在我的例子中,我认为它是从左侧开始的第五个颜色方格,我将其更改为(222,222,222)。当前选定的单选按钮显示屏幕文本还是屏幕背景并不重要,因为您只需重新定义特定的“系统”颜色即可。更改颜色后,不要忘记在单击确定之前选择背景或文本的首选颜色。

更改后,来自Node(在我的情况下为Ember)的所有这些红色消息都清晰可见。

油漆控制台

简单的可着色日志。支持检查对象和单行更新这个包只是重新绘制控制台。

安装

npm install paint-console

使用

require('paint-console');
console.info('console.info();');console.warn('console.warn();');console.error('console.error();');console.log('console.log();');

演示

您也可以使用色彩作品

用法:

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.]]`);

遇到了这个问题,并想在标准输出上使用一些颜色,而不需要任何依赖项。这结合了这里的一些其他很棒的答案。

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

// colors.jsconst 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!"))

预定义的颜色代码可用这里

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

var sys = require('sys');process.stdout.write("x1B[31m" + your_message_in_red + "\x1B[0m\r\n");

节点颜色

提供以彩色打印文本以及执行文本格式(如粗体、闪烁等)的功能。

今天有两种方法可以查看Node.js控制台的颜色变化。

一种是通过通用库,可以用颜色标签装饰文本字符串,然后通过标准console.log输出。

今天的顶级图书馆:

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

与通用颜色库的一个显着区别-它可以全局或本地设置颜色,同时为每个Node.js控制台方法保持一致的语法和输出格式,然后您无需指定颜色即可使用,因为它们都是自动设置的。

由于眼睛问题,我不得不将控制台背景颜色更改为白色,但字体是灰色的,使消息无法读取。我该如何更改它?

针对您的问题,这里有最简单的解决方案:

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

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

默认的颜色使用的manakin

在此处输入图片描述

没有库没有并发症只是简单:

console.log(red('Error!'));
function red(s) {return '\033[31m' + s;}

这是控制台中可用颜色(背景和前景)的列表,其中包含一些可用操作(如重置、反转等)。

const colours = {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" // Scarlet},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(colours.bg.blue, colours.fg.white, "I am a white message with a blue background", colours.reset) ;// Make sure that you don't forget "colours.reset" at the so that you can reset the console back to it's original colours.

或者您可以安装一些实用程序模块:

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

当您使用这些模块时,它们将向控制台显示如下内容:

我提到的实用模块示例。

您可以在下面找到运行应用程序时命令文本node.js颜色引用:

console.log('\x1b[36m%s\x1b[0m', 'I am cyan');  //cyanconsole.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是一个转义序列,它将被您的终端拦截并指示它切换到红色。事实上,\x1b不可打印控制字符escape的代码。仅处理颜色和样式的转义序列也称为ANSI转义码,并且是标准化的,因此它们(应该)适用于任何平台。

维基百科对不同终端显示颜色的方式进行了很好的比较https://en.wikipedia.org/wiki/ANSI_escape_code#Colors

我创建了自己的模块样式名称。我做了它,这样我就可以用很少的输入做很多事情。例子:

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"))

我不希望对此有任何依赖,只有这些在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

我重载了控制台方法。

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);};
// examplesconsole.info("Numeros",1,2,3);console.warn("pares",2,4,6);console.error("reiniciandooo");

输出是。

在此处输入图片描述

我为不能有依赖项的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、y和black

2017年:

简单的方法,添加时间颜色的消息,你不需要改变你的代码,使用保持你的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));};});

在此处输入图片描述

这是Windows 10(可能适用于7)的一种方法,它会更改cmd、npm终端本身的配色(主题),而不仅仅是特定应用程序的控制台输出。

我找到了工作的Windows插件-色彩工具,它大概是在Windows保护伞下开发的。链接中有描述。

我将颜色工具目录添加到系统环境路径变量中,现在每当我启动终端(NodeJs命令提示符,cmd)时它都可用。

颜色代码如上所述

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");

颜色和效果的顺序似乎并不重要,但请始终记住在最后重置颜色和效果。

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

在某些地方可能行不通

记录器/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 ")

我真的很喜欢@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);}});}
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);

我发现上面的答案(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 colorLog(color, ...args) {console.log(...args.map((it) => typeof it === "string" ? colorString(color, string) : it));}

像这样使用它:

colorLog(Color.FgYellow, "Some Yellow text to console log", { someObj: true });
console.log([colorString(Color.FgRed, "red"),colorString(Color.FgGreen, "green"),colorString(Color.FgBlue, "blue"),].join(", "));

这在一定程度上取决于你在哪个平台上要做到这一点,需要打印ANSI转义序列。以下是来自blender构建脚本的一些python代码:

// This is a object for use ANSI escape to color the text in the terminalconst 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}`)

表情符号

您可以使用文本的颜色,因为其他人在他们的答案中提到。

但是您可以使用表情符号代替!例如,您可以将⚠️用于警告消息,将🛑用于错误消息。

或者简单地将这些笔记本用作颜色:

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

🎁奖金:

此方法还可以帮助您快速扫描和查找日志直接在源代码中

例如:

console.log('Bring with ❤️ to you from Mojtaba Hosseini');

Some Linux distributions default emoji font may not be colorful by default and you may want to make them colorful, first.


How to open emoji picker?

mac os: control + command + space

windows: win + .

linux: control + . or control + ;

这适用于(我知道的)Node控制台。

包是快捷方式,您可以使用此命令安装它。const short = require('@testgrandma/shortcuts');

您可以执行两个命令来更改颜色。它是RGB颜色和十六进制颜色short.colorRGB(r,g,b);

short.colorhex(hex);

你可以做console.log(short.colorhex('d50000') + 'This is red!');

包可以在这里找到。

https://www.npmjs.com/package/

我在我的片段目录中创建了一个名为styles.js的文件,我认为它可能会帮助任何想要导入单个文件的人。

这是对#0color.js的一个小修改,对我帮助很大。

以下是文件的内容:

// Original: https://github.com/Marak/colors.js/blob/master/lib/styles.js
const styleCodes = {// Reset all styles.reset: [0, 0],    
// Text styles.bold: [1, 22],dim: [2, 22],italic: [3, 23],underline: [4, 24],inverse: [7, 27],hidden: [8, 28],strikethrough: [9, 29],    
// Foregound classic colours.fgBlack: [30, 39],fgRed: [31, 39],fgGreen: [32, 39],fgYellow: [33, 39],fgBlue: [34, 39],fgMagenta: [35, 39],fgCyan: [36, 39],fgWhite: [37, 39],fgGray: [90, 39],    
// Foreground bright colours.fgBrightRed: [91, 39],fgBrightGreen: [92, 39],fgBrightYellow: [93, 39],fgBrightBlue: [94, 39],fgBrightMagenta: [95, 39],fgBrightCyan: [96, 39],fgBrightWhite: [97, 39],
// Background basic colours.bgBlack: [40, 49],bgRed: [41, 49],bgGreen: [42, 49],bgYellow: [43, 49],bgBlue: [44, 49],bgMagenta: [45, 49],bgCyan: [46, 49],bgWhite: [47, 49],bgGray: [100, 49],bgGrey: [100, 49],    
// Background bright colours.bgBrightRed: [101, 49],bgBrightGreen: [102, 49],bgBrightYellow: [103, 49],bgBrightBlue: [104, 49],bgBrightMagenta: [105, 49],bgBrightCyan: [106, 49],bgBrightWhite: [107, 49],};
// This object will contain the string representation for all style codes.const styles = {};
// Loop over all the style codes and assign them to the `styles` object.//// The a `styleCode` in the `styleCodes` object consists of two numbers:// Index 0: The opening style code (In HTML this can be the opening <b> tag).// Index 1: The closing style code (In HTML this can be the closing </b> tag).for (let styleCode of Object.keys(styleCodes)) {styles[styleCode] = {open: `\x1B[${styleCodes[styleCode][0]}m`,close: `\x1B[${styleCodes[styleCode][1]}m`,};}
module.exports = styles;

它实际上很容易使用。

const styles = require("/path/to/styles.js");
// Let's say we've got an error:const errorOpen = styles.bold.open + styles.bgRed.open + styles.fgWhite.open;const errorClose = styles.reset.close; // Close everythingconsole.log(errorOpen, "ERROR", errorClose, ": Missing semicolon at line 9.");

内联打字稿解决方案

export const color = (function (colors) {const fn = (code: number, str: string) => `\x1b[${code}m${str}\x1b[39m`;const obj = { grey: fn.bind(null, 90) };for (let i = 0; i < colors.length; i++) obj[colors[i]] = fn.bind(null, 30 + i);return obj as { [K in typeof colors[any] | 'grey']: (str: string) => string };})(['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'] as const);

输入图片描述

所有这一切的替代方案是使用简单的ANSI代码生成器

  • 您不需要安装软件包
  • 无需搜索颜色代码,只需单击按钮

GIF演示

您可以在https://console-colors.vercel.app/使用它

公共存储库:https://github.com/alecshoppe/console-colors

如果你想保持简单不使用任何外部模块/学习新的API/破解核心console函数:

const LCERROR = '\x1b[31m%s\x1b[0m'; //redconst LCWARN = '\x1b[33m%s\x1b[0m'; //yellowconst LCINFO = '\x1b[36m%s\x1b[0m'; //cyanconst LCSUCCESS = '\x1b[32m%s\x1b[0m'; //green
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) }}
// then instead (as presented in the accepted answer)// console.error(LCERROR, 'Error message in red.');// you write:
logger.error('Error message in red.');
// or with multiple parameters (only the message will be red):
logger.error('Error message in red.', 1, false, null, {someKey: 'whatever'});
// or use backticks (template literal) instead multiple params:
logger.error(`This will be red as ${foo} and ${bar} too.`);

现在你可以像使用console一样使用logger了。没有新的API需要记住……通常你会把它放到一个模块(logger.js)中,然后导出class,以便能够在应用程序的任何地方使用它作为const logger = require('./logger');

最小别名:

{const f = (color) => (...args) => {for (const x of [color, ...args, "\33[0m"]) console.log(x);};
Object.assign(console, {black: f("\33[30m"),red: f("\33[31m"),green: f("\33[32m"),yellow: f("\33[33m"),blue: f("\33[34m"),magenta: f("\33[35m"),cyan: f("\33[36m"),white: f("\33[37m"),});}
// Usageconsole.blue("Blue world");