Node.js控制台彩色输出的方法与原理实例详解


Posted in Javascript onDecember 01, 2019

前言

我们都知道,在nodejs环境下使用普通的console.log,console.error,console.info输出都是不会有颜色的,如果你不知道,那你现在知道啦?。在这种情况下,如果我们需要彩色输出,则通常通过chalk这个node模块来实现,

chalk使用方法

基本用法

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

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

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

在 HTML 中支持 RGB 颜色,在这里同样支持,而且是支持所有 HTML 中支持的颜色,如十六进制颜色。这里仅仅说明十六进制颜色。

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

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 颜色值。

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

Node.js控制台彩色输出的方法与原理实例详解
四种方式的输出

常见形式

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

const chalk = require('chalk')

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

console.log(error('Error!'))
console.log(warning('Warning!'))

Node.js控制台彩色输出的方法与原理实例详解
错误和警告提示

常用API

样式

  • 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字样:

Node.js控制台彩色输出的方法与原理实例详解
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"

Node.js控制台彩色输出的方法与原理实例详解
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 缓慢闪烁的青色加粗带下划线字体

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js获取键盘按键响应事件(兼容各浏览器)
May 16 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
Jun 20 Javascript
限制只能输入数字的实现代码
May 16 Javascript
原生js实现jquery函数animate()动画效果的简单实例
Aug 21 Javascript
js 动态生成html 触发事件传参字符转义的实例
Feb 14 Javascript
jQuery:unbind方法的使用详解
Aug 14 jQuery
jQuery EasyUI开发技巧总结
Sep 26 jQuery
如何去除vue项目中的#及其ie9兼容性
Jan 11 Javascript
javascript实现手动点赞效果
Apr 09 Javascript
jquery添加div实现消息聊天框
Feb 08 jQuery
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 Javascript
three.js 实现露珠滴落动画效果的示例代码
Mar 01 Javascript
vue多个元素的样式选择器问题
Nov 29 #Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
Nov 29 #Javascript
vue 组件开发原理与实现方法详解
Nov 29 #Javascript
vue ajax 拦截原理与实现方法示例
Nov 29 #Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
Nov 29 #Javascript
js中关于Blob对象的介绍与使用
Nov 29 #Javascript
js blob类型url的视频下载问题的解决
Nov 29 #Javascript
You might like
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
js实现图片实时时钟
2020/01/15 Javascript
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
python实现文件分组复制到不同目录的例子
2014/06/04 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
python实现求最长回文子串长度
2018/01/22 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
幼儿园中秋节活动方案2013
2014/01/29 职场文书
运动会稿件200字
2014/02/07 职场文书
志愿者活动总结范文
2014/04/26 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书