Node.js在控制台彩色输出的方法及原理

本文首发于本人博客Node.js在控制台彩色输出的方法及原理,欢迎你们访问😘node

咱们都知道,在nodejs环境下使用普通的console.log,console.error,console.info输出都是不会有颜色的,若是你不知道,那你如今知道啦😏。在这种状况下,若是咱们须要彩色输出,则一般经过chalk这个node模块来实现,git

chalk使用方法

基本用法

const chalk = require('chalk')
console.log(chalk.red.bold.bgWhite('Leo\'s Blog'))
复制代码

上面代码执行的结果以下,Leo's Blog 加粗,字体颜色是红色,背景颜色是白色。github

注意:背景颜色要在 bg 后面加上具体的颜色,颜色的第一个字母大写。bash

在 HTML 中支持 RGB 颜色,在这里一样支持,并且是支持全部 HTML 中支持的颜色,如十六进制颜色。这里仅仅说明十六进制颜色。字体

下面的代码会和上面的代码实现相同的效果。ui

const chalk = require('chalk')
console.log(chalk.rgb(255,0,0).bold.bgRgb(255,255,255)('Leo\'s Blog'))
复制代码

使用模板

该模块有一个很方便的用法就是支持模板输出,也就是说,无论在字符串中的哪一个位置想改变输出的颜色,都是能够的。编码

const chalk = require('chalk')
console.log(chalk`{red.bold.bgWhite Leo\'s Blog}`)
复制代码

固然,也能够使用 RGB 颜色值。spa

const chalk = require('chalk')
console.log(chalk`{rgb(255,0,0).bold.bgRgb(255,255,255) Leo\'s Blog}`)
复制代码

四种方式的输出

常见形式

咱们常常看到的警告、错误提示就是这么来的code

const chalk = require('chalk')

const error = chalk.bold.red;
const warning = chalk.keyword('orange')

console.log(error('Error!'))
console.log(warning('Warning!'))
复制代码

错误和警告提示

经常使用API

样式cdn

  • reset - 样式重置
  • bold - 加粗
  • dim - 浅高亮
  • italic - 斜体
  • underline - 下划线
  • inverse- 反转前景和背景色
  • hidden - 隐藏内容
  • strikethrough - 删除线
  • visible- 显示chalk level > 0 的内容

前景色关键字(非全支持)

  • black
  • red
  • green
  • yellow
  • blue
  • magenta
  • cyan
  • white
  • blackBright (alias: gray, grey)
  • redBright
  • greenBright
  • yellowBright
  • blueBright
  • magentaBright
  • cyanBright
  • whiteBright

背景色关键字(非全支持)

  • bgBlack
  • bgRed
  • bgGreen
  • bgYellow
  • bgBlue
  • bgMagenta
  • bgCyan
  • bgWhite
  • bgBlackBright (alias: bgGray, bgGrey)
  • bgRedBright
  • bgGreenBright
  • bgYellowBright
  • bgBlueBright
  • bgMagentaBright
  • bgCyanBright
  • bgWhiteBright

更多API能够看看官方文档

chalk让控制台输出样式多变的原理

其原理最重要的一个知识点就是ANSI Escape code.

ASCII编码中有些字符是不能用来在终端中打印显示的,好比'\a' 0x7表明响铃,'\n' 0x0A表明换行,这些字符被称为控制符。

而其中的一个控制符 '\e' 0x1B比较特殊,这个字符表明 ESC ,即键盘上 ESC 按键的做用。ESC 是单词 escape 的缩写,即逃逸的意思。文本中出现这个控制符,表示接下来的字符是ANSI Escape code编码。

ANSI Escape code编码中有专门控制字符颜色的控制符,例如:\e[31;44;4;1m

其意义以下:

  • \e 表明开始ANSI Escape code
  • [ 表明转义序列开始符 CSI,Control Sequence Introducer
  • 31;44;4;1 表明以; 分隔的文本样式控制符,其中 31 表明文本前景色为红色,44表明背景为蓝色,4表明下划线,1表明加粗
  • m 表明结束控制符序列

咱们能够在终端中输入以下命令:

echo -e "\e[37;44;4;1mLEO\e[0m"
复制代码

会有以下输出,带下划线的LEO字样:

echo-leo

由于 \e 控制符的16进制码为 0x1B , 8 进制码为 033 ,也能够用如下写法达到一样效果:

echo -e "\e[37;44;4;1mLEO\e[0m"
echo -e "\x1b[37;44;4;1mLEO\x1b[0m"
echo -e "\x1B[37;44;4;1mLEO\x1B[0m"
echo -e "\033[37;44;4;1mLEO\033[0m"
复制代码

echo

经过维基百科,我查到有如下参数控制符:

代码 做用 备注
0 重置/正常 关闭全部属性。
1 粗体或增长强度
2 弱化(下降强度) 未普遍支持。
3 斜体 未普遍支持。有时视为反相显示。
4 下划线
5 缓慢闪烁 低于每分钟150次。
6 快速闪烁 MS-DOS ANSI.SYS;每分钟150以上;未普遍支持。
7 反显 前景色与背景色交换。
8 隐藏 未普遍支持。
9 划除 字符清晰,但标记为删除。未普遍支持。
10 主要(默认)字体
11–19 替代字体 选择替代字体{\displaystyle n-10}{\displaystyle n-10}。
20 尖角体 几乎无支持。
21 关闭粗体或双下划线 关闭粗体未普遍支持;双下划线几乎无支持。
22 正常颜色或强度 不强不弱。
23 非斜体、非尖角体
24 关闭下划线 去掉单双下划线。
25 关闭闪烁
27 关闭反显
28 关闭隐藏
29 关闭划除
30–37 设置前景色 参见下面的颜色表。
38 设置前景色 下一个参数是5;n或2;r;g;b,见下。
39 默认前景色 由具体实现定义(按照标准)。
40–47 设置背景色 参见下面的颜色表。
48 设置背景色 下一个参数是5;n或2;r;g;b,见下。
49 默认背景色 由具体实现定义(按照标准)。
51 Framed
52 Encircled
53 上划线
54 Not framed or encircled
55 关闭上划线
60 表意文字下划线或右边线 几乎无支持。
61 表意文字双下划线或双右边线
62 表意文字上划线或左边线
63 表意文字双上划线或双左边线
64 表意文字着重标志
65 表意文字属性关闭 重置60–64的全部效果。
90–97 设置明亮的前景色 aixterm(非标准)。
100–107 设置明亮的背景色 aixterm(非标准)。

颜色编码表以下:

名称 前景色代码 背景色代码
30 40
31 41
绿 32 42
33 43
34 44
品红 35 45
36 46
37 47
亮黑(灰) 90 100
亮红 91 101
亮绿 92 102
亮黄 93 103
亮蓝 94 104
亮品红 95 105
亮青 96 106
亮白 97 107

示例:

\e[31m 红色
\e[36;5;1;4m 缓慢闪烁的青色加粗带下划线字体
复制代码
相关文章
相关标签/搜索