本文首发于本人博客Node.js在控制台彩色输出的方法及原理,欢迎你们访问😘node
咱们都知道,在nodejs环境下使用普通的console.log
,console.error
,console.info
输出都是不会有颜色的,若是你不知道,那你如今知道啦😏。在这种状况下,若是咱们须要彩色输出,则一般经过chalk
这个node模块来实现,git
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!'))
复制代码
样式cdn
前景色关键字(非全支持)
背景色关键字(非全支持)
更多API能够看看官方文档。
其原理最重要的一个知识点就是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 Introducer31;44;4;1
表明以; 分隔的文本样式控制符,其中 31 表明文本前景色为红色,44表明背景为蓝色,4表明下划线,1表明加粗m
表明结束控制符序列咱们能够在终端中输入以下命令:
echo -e "\e[37;44;4;1mLEO\e[0m"
复制代码
会有以下输出,带下划线的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"
复制代码
经过维基百科,我查到有如下参数控制符:
代码 | 做用 | 备注 |
---|---|---|
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 缓慢闪烁的青色加粗带下划线字体
复制代码